2013-01-24 92 views
2

我正在做一個實驗,我們必須在外部文件中讀取數據,對數據進行一些統計,然後創建並寫入一個包含統計數據的新文件。除了編寫文件外,我的程序中的所有內容都工作正常,我無法理解爲什麼我的方法無法工作。使用Java中的BufferedWriter編寫文件

BufferedWriter writer; 

public void writeStats(int word, int numSent, int shortest, int longest, int average) 
{ 
    try 
    { 
     File file = new File("jefferson_stats.txt"); 
     file.createNewFile(); 

     writer = new BufferedWriter(new FileWriter(file)); 

     writer.write("Number of words: " + word); 
     writer.newLine(); 
     writer.write("Number of sentences: " + numSent); 
     writer.newLine(); 
     writer.write("Shortest sentence: " + shortest + " words"); 
     writer.newLine(); 
     writer.write("Longest sentence: " + longest + " words"); 
     writer.newLine(); 
     writer.write("Average sentence: " + average + " words");  
    } 
    catch(FileNotFoundException e) 
    { 
     System.out.println("File Not Found"); 
     System.exit(1); 
    } 
    catch(IOException e) 
    { 
     System.out.println("something messed up"); 
     System.exit(1); 
    } 
} 
+0

你可能希望你的最後writer.write後writer.newLine()()。 –

回答

14

你必須沖洗並關閉您的作家:顯式或隱式

writer.flush(); 
writer.close(); 
+5

close()會隱式地調用flush,你不需要從Oracle的文檔中明確地調用flush來清除 – PermGenError

+1

:Flush:刷新這個輸出流並強制寫出所有緩衝的輸出字節。 flush的一般約定是,調用它表明,如果先前寫入的任何字節已被輸出流的實現緩衝,則應立即將這些字節寫入其預期的目標。「在緩衝流上,推薦使用'flush()'然後'close()' – BackSlash

3

你應該總是接近運行結束資源用Java 7試用資源

try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) { 
     ...    
    } 

之外,還有一個更方便的類來編寫文本 - java.io.PrintWriter中

try (PrintWriter pw = new PrintWriter(file)) { 
    pw.println("Number of words: " + word); 
    ... 
} 
相關問題