2013-05-08 52 views
2

我想逐行寫入文件到文件。 我有這個問題,這個過程需要很多時間,有時會得到canceld。目前的版本只是在最後把文件寫入文件。是否可以逐行寫入文件?寫入文件,但不只是在末尾

E.g.如果我在第4行(400)之後出現,則該文件當前爲空。但我想在文件中已經有了4行。

這裏是我的代碼:

String path = args[0]; 
String filename = args[1]; 

BufferedReader bufRdr = // this does not matter 

BufferedWriter out = null; 
FileWriter fstream; 
try { 
    fstream = new FileWriter(path + "Temp_" + filename); 
    out = new BufferedWriter(fstream); 
} catch (IOException e) { 
    System.out.println(e.toString()); 
} 

String line = null; 

try { 
    while ((line = bufRdr.readLine()) != null) {    
     // HERE I'm doing the writing with out.write 
     out.write(...); 
    } 
} catch (IOException e) { 
    System.out.println(e.toString()); 
} 

try { 
    out.close(); 
} catch (IOException e) { 
    System.out.println(e.toString()); 
} 
+1

刷新流以將內容保存到文件。雖然不建議繼續沖洗溪流。更好的是設置一個線的閾值(比如說每50線之後),在該點之後沖洗。 – 2013-05-08 08:33:23

+0

另一方面,如果您尚未注意到它,bufRdr在使用之前需要初始化。 – mawia 2013-05-08 08:41:13

回答

5

使用時要確保已經被寫入到寫數據進入該文件的沖洗功能

out.flush() 
+1

這是它,謝謝:) – gurehbgui 2013-05-08 08:31:39

3

嘗試out.flush()out.write(...)

+0

這是它,謝謝:) – gurehbgui 2013-05-08 08:38:53

2

調用out.write(...)後使用out.flush()

2

考慮到java文檔FileWriter,您可以直接使用FileWriter將文件寫入文件,而無需使用BufferedWriter。另外,正如所指出的那樣,您需要在關閉緩衝區之前刷新數據。函數write只填充緩衝區,但不寫入磁盤上的文件。此操作通過使用flushclose(將緩衝區的當前內容寫入磁盤)完成。這兩個功能之間的區別是flush讓我們來寫東西,然後close關閉這個流。

1

在out.flush()或out.close()關閉之前,寫入緩衝區的數據通常不會被寫入。所以爲了您的要求,您應該使用out.flush();