我一直致力于一个允许存储手册的小型图书馆应用程序。到目前为止,我已经实现了代码以允许我的应用程序保存到现有的文本文件,我希望每次用户保存时都更新相同的文件,而不是覆盖。
目前,如果我输入1个手册并保存库,则会更新文本文件。但是,如果我向库添加第二个手册然后保存,则第一个手册将复制到文本文件
中以下是添加第二本手册后文本文件的示例:
以下是我用来保存的代码:
//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();
}
如果有人知道我如何能够获得第一本停止复制的手册,请告诉我:)
答案 0 :(得分:1)
我有点困惑,你说你不想覆盖这个文件,你想要追加它......而这恰恰是什么?发生。
PrintWriter将附加到现有文件。所以我假设在第一次运行时会发生什么,它会创建初始的索引0&#39;块。在您的后续运行中,它只会附加到文件,复制第一个条目。
为避免这种情况,您可以每次都从头开始创建文件对象,例如:
File file = new File("Library.txt");
file.delete();
file.createNewFile();
FileWriter fw = new FileWriter(file, true);
但是,正如您的问题所描述的那样,您遇到的问题似乎正是您想要的......?