我试图像这样打印到.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));
}
我正在向控制台获得所需的结果,但是当我尝试覆盖我正在阅读的文件时,它完全是空白的。有任何想法吗?我确实需要覆盖该文件,因为我不想保留原始数据。
答案 0 :(得分:2)
你有两个问题。
首先,这个:
PrintWriter output = new PrintWriter(csvFile);
截断文件。这意味着您在每次循环迭代时截断文件。
其次,PrintWriter
不会自动将其内容刷新到目的地,而您不会.flush()
它。由于您的文件为空,这也意味着您可能忘记了.close()
。
假设您使用的是Java 7,请改为使用它(注意:假设csvFile
为String
;如果是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();