[英]do i need call close() on every new inputstream?
這是代碼。
public static void main(String[] args) throws IOException {
FileInputStream fis = null;
fis = new FileInputStream(new File("D:\\za180s.ser"));
// do something
fis = new FileInputStream(new File("D:\\za185s.ser"));
// do something
fis = new FileInputStream(new File("D:\\za186s.ser"));
// do something
fis = new FileInputStream(new File("D:\\za187s.ser"));
// do something
fis.close();
}
問題是:需要我在每次“做某事”之后調用fis.close()方法,或者我畢竟只是一次調用fis.close()一次。
忽略最后的close()位置和代碼是否需要try catch。
全部。
是的,您需要在每個單獨的InputStream
上調用close。 代碼的問題是每次創建新流時都要重新分配變量fis
。 換句話說: fis
不再指向舊的InputStream
,因此調用close不會關閉前一個流。
有關更多信息,請檢查https://stackoverflow.com/a/40523/8819761
您還可以使用Java 7的try-with-resources語法,一旦退出try塊,該語法將自動關閉流:
try (InputStream fis = new FileInputSteam(yourFile)) {
// Do something
}
try (InputStream fis = new FileInputSteam(yourFile)) {
// Do something else
}
每次使用InputStream完成時,您都必須關閉。
在Java中,如果您分配
fis = new FileInputStream(new File("D:\\za180s.ser"));
fis將指向新對象,因此當您調用fis.close()時,舊流不會受到影響。 而且沒有辦法將其關閉。
您每次都需要調用close方法,但是現在不必擔心。在Java SE 7中,您可以使用try-with-resources
。 根據Java-Oracle文檔,
try-with-resources語句是一個try語句,用於聲明一個或多個資源。 資源是程序完成后必須關閉的對象。 try-with-resources語句可確保在語句末尾關閉每個資源。 任何實現java.lang.AutoCloseable的對象(包括所有實現java.io.Closeable的對象)都可以用作資源。
請看例子。
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
在此示例中,在try-with-resources語句中聲明的資源是BufferedReader。 聲明語句出現在try關鍵字之后的括號內。 Java SE 7和更高版本中的BufferedReader類實現接口java.lang.AutoCloseable。 因為BufferedReader實例是在try-with-resource語句中聲明的,所以無論try語句是正常完成還是突然完成(由於BufferedReader.readLine方法引發IOException),它都將關閉。
有關更多詳細信息,請查看Oracle-Java文檔try-with-resources
。
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.