-2

我在用 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();
}
4

1 回答 1

6

这个问题可能应该被关闭,因为它已经被多次询问和回答,但关键是使用正确的 FileWriter 构造函数,该构造函数将 true 作为第二个参数。第二个 true 参数告诉 Java 打开文件以进行追加而不是覆盖。

//FileWriter flw = new FileWriter(path); // not this
FileWriter flw = new FileWriter(path, true);  // but this

事实上,我投票决定将这个问题作为重复问题结束。

顺便说一句:您可能不想直接使用 FileWriter 编写,而是希望将其包装在 BufferedWriter 或(我的偏好)PrintWriter 实例中。println(...)这将允许您使用和其他熟悉的方法简单、更有效地写入文件。

编辑2:在查看了更多代码之后,我认为实际上您应该考虑使用 PrintWriter 类,然后使用该printf(...)方法进行编写,因为这允许格式化字符串输出,这比您尝试的一堆选项卡好得多去做。

于 2013-04-23T18:03:24.193 回答