Java 每次用户保存库时保存到新的txt文件

Java 每次用户保存库时保存到新的txt文件,java,text,output,Java,Text,Output,如何使我的应用程序能够在用户每次希望保存时保存到一个新的.txt文件,而不是覆盖现有文件 我有一段代码,它起作用并将信息保存到文本文件中: if(Menu.menuChoice == 1 && Library.ManualList.size() > 0){ Library.displayManualList(); boolean saveYes

如何使我的应用程序能够在用户每次希望保存时保存到一个新的.txt文件,而不是覆盖现有文件

我有一段代码,它起作用并将信息保存到文本文件中:

            if(Menu.menuChoice == 1 && Library.ManualList.size() > 0){                      
                Library.displayManualList();
                boolean saveYesNo = Console.readYesNo("The 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");
                        PrintWriter pw = new PrintWriter(fw);

                        for (int i1 = 0; i1 < Library.ManualList.size(); i1++){
                            pw.println("-------------------- Index Number: " + i1 + " --------------------");
                            pw.println(Library.ManualList.get(i1).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");
                }
if(Menu.menuChoice==1&&Library.ManualList.size()>0){
Library.displayManualList();
布尔值saveYesNo=Console.readYesNo(“ManualKeeper®应用程序能够将当前库保存到工作区目录中的“.txt”\n文件中。\n\n是否保存当前库?(Y/n):\n”);
if(saveYesNo){
试一试{
FileWriter fw=新的FileWriter(“Library.txt”);
PrintWriter pw=新的PrintWriter(fw);
对于(int i1=0;i1

理想情况下,我希望文件以编号方式保存,以便用户可以在以后轻松选择要查看的.txt文件。

要每次将其保存到新文件,文件名必须是唯一的

你可以通过多种方式实现这一点。一些想法:

文件名中的日期+时间 将当前日期+时间添加到文件名中,这也将提供与创建/保存文件时相同的信息,并且在列出文件时,较新的文件将自然位于列表的末尾

String name = "Library-"
    + new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date()) + ".txt";
另一种选择是,您可以简单地附加以下内容,这将保留自然的创作顺序,但不会像这样美观/信息丰富:

String name = "Library-" + System.currentTimeMillis() + ".txt";
文件名中的随机字符串 这可能不太好看,但例如:

String name = "Library-" + UUID.randomUUID() + ".txt";
文件名中的计数器 这个想法是在文件名中使用一个计数器,因此第一个应该是
“Library.txt”
,第二个应该是
“Library(2.txt)”
,第三个应该是
“Library(3.txt)”
等等

为了实现这一点,我们必须检查现有文件以确定计数器的下一个值。下面是一个如何执行此操作的示例。这不是最佳操作,但可以执行以下操作:

public static Path uniqueFile() {
    Path file = Paths.get("Library.txt").toAbsolutePath();
    if (!Files.exists(file))
        return file;

    Path folder = file.getParent();

    for (int counter = 2; true; counter++) {
        file = folder.resolve(String.format("Library (%d).txt", counter));

        if (!Files.exists(file))
            return file;
    }
}
使用它:

String name = uniqueFile().getFileName().toString();

如果应用程序是用GUI制作的,那么文件对话框将是最好的(如果他想覆盖文件,则保存,如果他想将其保存到新文件,则保存,就像许多应用程序一样)

在您的情况下,您应该使用计数器并将其添加到文件末尾,如Library1.txt。 如果重新运行应用程序,当然这个计数器变量是rest resp。它不会被存储。我建议将这个变量(和其他类似的属性)存储在另一个文件中,例如config.txt

您可以读取这个config.txt文件(并像我在前面的回答中向您展示的那样对其进行解析)。因此,每次启动应用程序时,您都要读取config.txt文件,设置计数器。当然,在退出应用程序之前,您必须将计数器保存到config.txt文件中

只是伪代码:

//load at start of application
counter = loaded from config.txt
//save to a new file

FileWriter fw = new FileWriter("Library" + counter++ + ".txt");

//save counter to config.txt file

您不能简单地在文件名的末尾添加一个整数吗?