亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我需要在每個新的輸入流上調用close()嗎?

我需要在每個新的輸入流上調用close()嗎?

智慧大石 2022-08-03 10:40:38
這是代碼。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() 位置是否最終和代碼需要嘗試 catch 。所有。
查看完整描述

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

}


查看完整回答
反對 回復 2022-08-03
?
臨摹微笑

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


查看完整回答
反對 回復 2022-08-03
?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

每次使用 InputStream 時,您都必須關閉。

在 java 中,如果分配

 fis = new FileInputStream(new File("D:\\za180s.ser"));

fis將指向新對象,因此當您調用fis.close()時,舊流不受影響。而且沒有辦法關閉它。


查看完整回答
反對 回復 2022-08-03
  • 3 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號