2013-01-24 72 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); 
    ... 
} 
相关问题