Java - 保存到txt文件会复制第一个条目

时间:2015-01-06 14:59:02

标签: java duplicates filewriter printwriter

我一直致力于一个允许存储手册的小型图书馆应用程序。到目前为止,我已经实现了代码以允许我的应用程序保存到现有的文本文件,我希望每次用户保存时都更新相同的文件,而不是覆盖。

目前,如果我输入1个手册并保存库,则会更新文本文件。但是,如果我向库添加第二个手册然后保存,则第一个手册将复制到文本文件

以下是添加第二本手册后文本文件的示例:

enter image description here

以下是我用来保存的代码:

//Choice 7: Save Library:

if(Menu.menuChoice == 7 && Library.ManualList.isEmpty()){
    System.out.println(Messages.addManualFirst);
    Menu.displayMenu();
}

else if(Menu.menuChoice == 7){
    Library.displayManualList();
    boolean saveYesNo = Console.readYesNo("\nThe ManualKeeper® app is able to save your current library to a '.txt' \nfile in your workspace directory.\n\nWould you like to save the current library? (Y/N):\n");
    if(saveYesNo){
        try {
            FileWriter fw = new FileWriter("Library.txt", true);
            PrintWriter pw = new PrintWriter(fw);

            for (int i = 0; i < Library.ManualList.size(); i++){
                pw.println("-------------------- Index Number: " + i + " --------------------");
                pw.println(Library.ManualList.get(i).displayManual());
                pw.println("---------------------------------------------------------\n");
            }
            pw.close();
        } catch (IOException e) {
            System.out.println("Error! Library unable to save.");
        }
        System.out.println("\n\n--------------------------------------------------------------------------");
        System.out.println("\n                              Library saved!\n");
        System.out.println("--------------------------------------------------------------------------\n");
    }
    else if(saveYesNo){
        System.out.println("\n");
    }
    Menu.displayMenu();

}

如果有人知道我如何能够获得第一本停止复制的手册,请告诉我:)

1 个答案:

答案 0 :(得分:1)

我有点困惑,你说你不想覆盖这个文件,你想要追加它......而这恰恰是什么?发生。

PrintWriter将附加到现有文件。所以我假设在第一次运行时会发生什么,它会创建初始的索引0&#39;块。在您的后续运行中,它只会附加到文件,复制第一个条目。

为避免这种情况,您可以每次都从头开始创建文件对象,例如:

File file = new File("Library.txt");
file.delete();
file.createNewFile();
FileWriter fw = new FileWriter(file, true);

但是,正如您的问题所描述的那样,您遇到的问题似乎正是您想要的......?