将输出数据写入文本文件会导致文本文件中的结果不完整

时间:2013-10-14 10:53:05

标签: java bufferedreader filewriter

我有14个列表,每个列表都有数字或字符串数​​据。每个列表的大小是32561.我必须输出格式为

的文件
list1_element1   list2_element1.......................list14_element1
list1_element2   list2_element2.......................list14_element2
.
.
.
.
.
list1_element32561   list2_element32561.......................list14_element32561

输出文件中的每个元素由制表符空格分隔。我在Java中这样做了。

        out = new BufferedWriter(new FileWriter(fileName));
        for(int i=0; i<32561; i++) {
        out.write(firstList.get(i));
        out.write("\t");
        out.write(secondList.get(i));
        out.write("\t");
        out.write(thirdList.get(i));
        out.write("\t");
        out.write(fourthList.get(i));
        out.write("\t");
        out.write(fifthList.get(i));
        out.write("\t");
        out.write(sixthList.get(i));
        out.write("\t");
        out.write(seventhList.get(i));
        out.write("\t");
        out.write(eighthList.get(i));
        out.write("\t");
        out.write(ninthList.get(i));
        out.write("\t");
        out.write(tenthList.get(i));
        out.write("\t");
        out.write(eleventhList.get(i));
        out.write("\t");
        out.write(twelvethList.get(i));
        out.write("\t");
        out.write(thirteenthList.get(i));
        out.write("\t");
        out.write(fourteenthList.get(i));
            out.write("\t");
        out.write(fifteenthList.get(i));

        out.newLine();
    }
}

我的程序只打印32441行,最后一行只包含6列。我不明白为什么。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:5)

你没有关闭作家。

答案 1 :(得分:2)

缓冲区仅在其满时写入流,或者您在其上调用writer.flush()或writer.close()函数。在您的情况下,您只需要添加

  
    

out.close()

  

在您的计划结束时。否则,缓冲区中的数据不会在程序结束时写入,而不会告诉编写器写入其缓冲区的剩余内容;假设将有更多数据来保持它!

答案 2 :(得分:0)

您尚未提供完整的方法代码,但问题可能是“没有关闭编写器而不能正确刷新输出缓冲区”。

需要刷新输出缓冲区时使用out.flush();。当您结束写入文件时out.close;

或者

您可以使用PrintWriter:

PrintWriter writer = new PrintWriter(new FileWriter("file name"), true);

在println()或format()或printf()在writer上调用时自动刷新输出缓冲区。或者你可以手动使用writer.flush()来刷新输出缓冲区。