结果打印到控制台但不打印到文件

时间:2014-03-14 18:20:37

标签: java csv file-io

我试图像这样打印到.csv:

(A和B是String类型的ArrayLists)

for(int i = 0; i < A.size(); i++) {
    PrintWriter output = new PrintWriter(csvFile);
    System.out.println(A.get(i)+", "+ B.get(i));
    output.println(A.get(i)+", "+ B.get(i));
}

我正在向控制台获得所需的结果,但是当我尝试覆盖我正在阅读的文件时,它完全是空白的。有任何想法吗?我确实需要覆盖该文件,因为我不想保留原始数据。

2 个答案:

答案 0 :(得分:2)

你有两个问题。

首先,这个:

PrintWriter output = new PrintWriter(csvFile);

截断文件。这意味着您在每次循环迭代时截断文件。

其次,PrintWriter不会自动将其内容刷新到目的地,而您不会.flush()它。由于您的文件为空,这也意味着您可能忘记了.close()

假设您使用的是Java 7,请改为使用它(注意:假设csvFileString;如果是File,请在下面的代码提取中使用csvFile.toPath()而不是Paths.get(csvFile)):

try (
    final BufferedWriter w = Files.newBufferedWriter(Paths.get(csvFile),
        StandardCharsets.UTF_8, StandardOpenOption.CREATE);
    final PrintWriter writer = new PrintWriter(w);
) {
    for(int i = 0; i < A.size(); i++) {
        System.out.println(A.get(i)+", "+ B.get(i));
        writer.println(A.get(i)+", "+ B.get(i));
    }
    writer.flush();
}

答案 1 :(得分:0)

关闭PrintWriter output.close();

PrintWriter output = new PrintWriter(csvFile);
System.out.println(A.get(i)+", "+ B.get(i));
output.println(A.get(i)+", "+ B.get(i));
output.close();