2014-02-26 119 views
2

格式化程序是否只在關閉流時才寫出來?Java格式化程序輸出

代碼:

public void save(String content, String filename) { 
    if(filename!=""){ 
     setFileName(filename); 
     try { 
      output = new Formatter(new File(fileName)); 
      output.format("%s",content); 
     } catch (FormatterClosedException ex){ 
      System.err.println("Error writing to file"); 
      return; 
     } catch (NoSuchElementException ex){ 
      System.err.println("invalid input"); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     finally { 
      output.close(); 
     } 

起初,我忘了加上最後用output.close(),當該方法得到了所謂的不會寫任何東西阻擋。那麼格式化程序只有在關閉流程時才真正寫入其內容纔是正確的?

回答

0

你也可以使用flush()在底層的緩衝流的自由裁量權將數據寫入流立即

0

Formatter輸出,但是你可以通過調用flush()close()迫使它這樣做。

1

來自documentation要用作此格式化程序的目標的文件。如果文件存在,則它將被截斷爲零大小;否則,將創建一個新文件。輸出將被寫入文件並被緩衝。

當調用flush時,輸出緩衝的類將寫入它們的內容。這種情況隱含在close方法中。

您必須關閉它或致電flush()

+0

這是如何回答這個問題的?當'Formatter'寫入文件時,文檔沒有說明何處。 –

+0

* ...並且被緩衝。*緩衝是許多Java類中的一個概念,並且* always *需要調用'flush'('close'也是這樣)。 – exception1

+0

-1這不是問題的答案。 flush()被close()調用的方面在這裏不是這種情況。這種情況是,當緩衝區不僅關閉時,文件將被寫入。 –

1

close()隱式地調用flush(),但是當你需要發送數據的時候你可以使用flush()。

5

假設只有當您撥打close()才能訪問此例中的文件資源,則無效

通過調用close()您可以確保寫入完成並釋放資源。

寫入它取決於類BufferedWriter這意味着當您超過緩衝區大小時,數據將從它[緩衝區]移動到資源[文件]。你可以強制你通過調用flush()來做到這一點,那就是close()

如果緩衝區長度爲1KB(8192位),則默認大小。

+3

這是實際回答問題的唯一答案。 – Qwerky