3 回答

TA貢獻1802條經驗 獲得超6個贊
是的,您需要對每個人進行關閉。代碼的問題在于,每次創建新流時都要重新分配變量。換句話說:不再指向舊的,所以調用關閉不會關閉以前的流。InputStreamfisfisInputStream
有關詳細信息,請查看 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
}

TA貢獻1982條經驗 獲得超2個贊
您需要每次都調用 close 方法,但現在不用擔心。從 Java SE 7 中,您可以使用 .根據Java-Oracle Doc,try-with-resources
使用資源試用語句是聲明一個或多個資源的 try 語句。資源是在程序完成之后必須關閉的對象。資源試用語句確保在語句末尾關閉每個資源。任何實現 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

TA貢獻1815條經驗 獲得超6個贊
每次使用 InputStream 時,您都必須關閉。
在 java 中,如果分配
fis = new FileInputStream(new File("D:\\za180s.ser"));
fis將指向新對象,因此當您調用fis.close()時,舊流不受影響。而且沒有辦法關閉它。
添加回答
舉報