我在使用Java写入文件时遇到问题。我想写入.txt文件,但是当程序写入任何内容时,它会在写入之前删除。我不想要它。我在使用flw.append之前使用了flw.write,但没有任何改变。你能救我吗?
public void list(String path) throws IOException {
FileWriter flw=new FileWriter(path);
flw.append("----------------------------------------------List---------------------------------------------\n");
for (int i = 0; i < athCtr - 1; i++) {
flw.append("Author:" + athr[i].getId() + "\t"
+ athr[i].getName() + "\t" + athr[i].getUniv() + "\t"
+ athr[i].getDepart() + "\t" + athr[i].getEmail()+"\n");
if (athr[i].getArtCtr() != 0) {
for (int j = 0; j < athr[i].getArtCtr(); j++) {
flw.append("+" + athr[i].getArticle(j) + ":");
for (int k = 0; k < artCtr; k++) {
if (art[k].getPaperId().equals(athr[i].getArticle(j))) {
flw.append("\t" + art[k].getName() + "\t"
+ art[k].getPublisherName() + "\t"
+ art[k].getPublishYear()+"\n");
}
}
}
flw.append("\n");
}
}
flw.append("Author:" + athr[athCtr - 1].getId() + "\t"
+ athr[athCtr - 1].getName() + "\t"
+ athr[athCtr - 1].getUniv() + "\t"
+ athr[athCtr - 1].getDepart() + "\t"
+ athr[athCtr - 1].getEmail()+"\n");
if (athr[athCtr - 1].getArtCtr() != 0) {
for (int j = 0; j < athr[athCtr - 1].getArtCtr(); j++) {
flw.append("+" + athr[athCtr - 1].getArticle(j) + ":");
for (int k = 0; k < artCtr; k++) {
if (art[k].getPaperId().equals(
athr[athCtr - 1].getArticle(j))) {
flw.append("\t" + art[k].getName() + "\t"
+ art[k].getPublisherName() + "\t"
+ art[k].getPublishYear()+"\n");
}
}
}
}
flw.append("----------------------------------------------End----------------------------------------------\n\n");
flw.close();
}
答案 0 :(得分:6)
这个问题可能应该被关闭,因为它被多次询问和回答,但关键是要使用正确的FileWriter构造函数,一个将第二个参数作为真实的构造函数。第二个true参数告诉Java打开文件以进行追加而不是覆盖。
//FileWriter flw = new FileWriter(path); // not this
FileWriter flw = new FileWriter(path, true); // but this
事实上,我投票决定将此问题视为副本。
顺便说一句:您可能不想直接使用FileWriter编写,而是希望将其包装在BufferedWriter或(我的首选项)PrintWriter实例中。这将允许您使用println(...)
和其他熟悉的方法简单而有效地写入文件。
编辑2:在仔细查看代码后,我认为实际上您应该考虑使用PrintWriter类,然后使用printf(...)
方法进行编写,因为这样可以实现格式化的字符串输出,这种方法比你想要做的一堆标签。