2011-05-05 32 views
0

我有一個函數可以創建包含數據行的7個不同的文本文件。然後,這些7個文件使用下列函數組合成在不同的功能的單個文件:爲什麼最後幾行缺少我創建的文本文件?

public void createSingle683File(int groupNumber, FileWriter wr){ 
     try{ 
      if(new File(printDir+"683_"+groupNumber+".txt").exists()){ 
       File f683 = new File(printDir+"683_"+groupNumber+".txt"); 
       BufferedReader input = new BufferedReader(new FileReader(f683)); 
       String line = null; 
       while ((line = input.readLine()) != null){ 
        //write contents of existing file to new file 
        wr.write(line+"\n"); 
       } 
       //close bufferedInput 
       input.close(); 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

調用代碼:

File fileHandle683 = new File(printDir+"683.txt"); 
       FileWriter wr683 = new FileWriter(fileHandle683); 
       for (int groupNumber = 1; groupNumber < 8; groupNumber++){ 
        createSingle683File(groupNumber,wr683); 
       } 
. 
. 
. 
. 
.//stuff 
wr683.close(); 

Alaways最終683.txt缺失從大約50行第7個文件(683_7.txt),我不明白爲什麼。它總是,並且只是最後文件的最後幾行缺失。我不能告訴我是否即將關閉bufferInput,或者什麼。

任何想法將不勝感激。我可以很快測試任何想法。

謝謝!

回答

2

我沒有看到你正在關閉的地方wr683。我懷疑當進程關閉時數據將被留在緩衝區中。至少請致電flush()

+0

什麼是flush()做那close()不? – northpole 2011-05-05 17:14:34

+0

它將所有數據寫入磁盤,但將寫入器打開以獲得更多輸出。如果你想繼續寫作,但也希望儘量減少丟失數據的機會,這很有用。 – 2011-05-05 17:17:35

+0

是的,我逐步瞭解它正在被調用。我只是將flush()添加到7個文件中的每個文件的for循環中,並且修復了這個問題!謝謝! – northpole 2011-05-05 17:28:23

3

您是否在該FileWriter實例上調用flush()和/或close()

+0

是的,我使用wr683.close()函數結束wr683; – northpole 2011-05-05 17:12:42

+0

您確定正在執行'close()'嗎? – 2011-05-05 17:22:52

0

當前,您並未關閉最終文件的文件編寫器。所以可能是,您目前缺少的內容仍然在流I/O的緩存中。因此關閉最終文件的FileWriter實例並查看文件的內容。

所以之後的循環中,您只需輸入

wr683.close();

希望它有幫助。

相關問題