这是我的代码:
public static void writeDataToCSV(CustomObjectData customObjectData, int pageCounter) {
try {
int i = 0;
int elementCounter = 0;
List<String> values = new ArrayList<>();
String tmp = "";
// System.out.println("Size of customobjectdata elements, should be 1000:
"+customObjectData.elements.size());
for (CustomObjectDataElements x : customObjectData.elements) {
for (FieldValue y : x.fieldValues) {
values.add(y.value);
}
for (String element : values) {
tmp += element + ";";
}
writer.append(tmp.substring(0, tmp.length() - 1) + "\r\n");
// count elements written into file to track in case of failure
elementCounter++;
if (elementCounter % 20 == 0) {
System.out.print("*");
}
System.out.println("");
FileWriter out = new FileWriter("data\\resumeat.txt");
System.out.print(elementCounter+pageCounter*1000+"");
out.write(elementCounter+pageCounter*1000+"");
out.close();
values.clear();
tmp = "";
}
System.out.println("Records: "+pageCounter*1000+" - "+
((pageCounter+1)*1000-1) +" written to csv.");
// System.out.println("Headers: "+CSVHeaders+" Values: "+CSVValues);
System.out.print(".");
if (i >= 99) {
System.out.println("");
i = -1;
}
i++;
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是将记录附加到csv的简单方法。不幸的是,我需要跟踪导入的每条记录,这样如果程序崩溃,我可以从该记录开始。
我通过将最后附加的元素数量保存到txt文件来尝试它。
但是,在我写过的txt文件中,例如2000年和csv只是1987年的记录。这意味着如果我使用writer.append,它不会立即执行。即使我的计数器在追加之后也是如此。看起来程序不会等到它被追加。如果它已被附加或任何想法,我能以某种方式检查吗?
答案 0 :(得分:2)
如果你使用BufferedWriter
,它的名字就是它的名字:我使用了一个缓冲区。如果您在某个时间点确定已写出该缓冲区中的所有数据,则必须向writer.flush
发出呼叫(除非您已关闭writer
)。