2013-10-17 70 views
1

我试图从一个ArrayList的元素写入文本文件。我的BufferedWriter代码如下(与实际文件路径):BufferedWriter不写整个文件 - 只有一部分

Path file = Paths.get("(filepath)"); 
    BufferedWriter writer = Files.newBufferedWriter(file, Charset.forName("US-ASCII")); 
    for (int j = 0; j < 100000; j++) { 
     writer.write(Integer.toString(radicalsAndPositions.get(j).get(0)) + "," + Integer.toString(radicalsAndPositions.get(j).get(1)) + " , " + "\n"); 
    } 

该ArrayList充满达100,000元件,并生成一个文件,而是从端错过值。当我将'j'限制为10,000时,我只能得到生成的第一批9170行。在全部10万条的情况下,我只获得了99250条线。

将'j'限制为1000会给我一个空文件。

该文档生成正确,正确的元素,它只是过早地结束。为什么是这样,我该如何解决它?

回答

3

关闭的BufferedWriter对象之后还写writer.flush()

writer.close();

,除非您关闭了BufferedWriter的对象,不会写你的文件。

+0

是否有原因如果没有结束,它只会部分写入? – Useablelobster

+1

BufferedWrite的概念是缓冲。当缓冲区满时它会刷新并减少单独的IO操作的数量。当你调用flush和关闭writer时,它也会刷新。 – Thomas

+1

是的,肯定是有原因的。它关闭您正在编写文件的当前流。它需要被关闭,以反映你在一个文件中所做的改变。它也刷新流。 – Prasad

3

完成后请关闭缓冲的写入器,以确保缓冲区被刷新。

2

写入文件

writer.close() is also a good choice 
+2

调用'close()'应该足够了,请参阅http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#close%28%29 – divadpoc