2014-01-17 90 views
1

当我运行的代码一切正常,但内容不写入target.txt。请告诉我为什么下面的代码不工作?

public class SrtExtractor { 
     public static void main(String[] args) throws IOException { 
      Path source = Paths.get("files/loremipsum.txt"); 
      Path target = Paths.get("files/target.txt"); 
      Charset charSet = Charset.forName("US-ASCII"); 
      BufferedReader reader = Files.newBufferedReader(source, charSet); 
      BufferedWriter writer = Files.newBufferedWriter(target, charSet); 
      String temp; 
      ArrayList<String> list = new ArrayList<>(); 
      while((temp = reader.readLine())!=null){ 
       list.add(temp); 
       System.out.println(temp); 
      } 
      for(int i = 0; i<list.size(); i++) 
      { 
       writer.append(list.get(i));//why this line is not working??? 
      } 
     } 
    } 
+1

尝试writer.flush()和writer.close() – Gus

+1

您离开'writer.close()'。 – PeterMmm

+0

你有没有费心去浏览调试器中的代码? – OldProgrammer

回答

1
for(int i = 0; i<list.size(); i++) { 
    writer.append(list.get(i)); 
} 
writer.close(); //Add this 
reader.close(); //Add this 

您还没有表明你做写入文件。直到你说close()该文件实际上并未被写入,文本只是坐在BufferedWriter

0

大家都说,你应该加writer.close()

到另一边,我认为要在一个文本文件中写的最好的方式是这样的(它总是对我来说运行):

File file = new File(path); 
FileOutputStream fout = new FileOutputStream(file); 
OutputStreamWriter osw = new OutputStreamWriter(fout); 
Writer w = new BufferedWriter(osw); 
for(...){ 
    w.write(...); 
} 
3

您使用的是BufferedWriter类 - 在这种情况下,你写的内容仍然在Buffer中。需要调用writer.flush();来清除Buffer的内容并将它们写入基础流。

flush()当调用close()时也会自动调用。为了避免内存泄漏,当程序完成其资源时应该调用close()。正确关闭资源很难做到正确,但Java 7添加了新的try-with-resources construct以帮助程序员正确关闭资源。

下面是您重写为使用try-with-resources构造的示例。这将确保您的两个流都能正确关闭,即使在处理文件时发生异常也是如此。它基本上与您的读写器上调用close()相同,但它更安全并使用更少的代码。

public class SRTExtractor { 
    public static void main(String[] args) throws IOException { 
     Path source = Paths.get("files/loremipsum.txt"); 
     Path target = Paths.get("files/target.txt"); 
     Charset charSet = Charset.forName("US-ASCII"); 
     try (
      BufferedReader reader = Files.newBufferedReader(source, charSet); 
      BufferedWriter writer = Files.newBufferedWriter(target, charSet); 
     ) { 
      String temp; 
      ArrayList<String> list = new ArrayList<>(); 
      while ((temp = reader.readLine()) != null) { 
       list.add(temp); 
       System.out.println(temp); 
      } 
      for (int i = 0; i < list.size(); i++) { 
       writer.append(list.get(i)); 
      } 
     } 
    } 
} 
+0

+1以前没见过自动关闭资源的新功能,真好! – Fredrik

相关问题