为什么我的反复制文件循环不起作用?

时间:2019-03-26 18:05:41

标签: java

我正在创建一个项目,当用户想要添加客户时,会随机生成一个“ UserID”。连同此UserID一起,将创建一个格式为userID的文件,其中包含用户输入的名字和姓氏。我目前正在使用random来生成用户ID,并创建了一个do while循环以避免可能的重复。在最终项目中,我将随机设置为从9999拉出,但是出于演示和重复测试的目的,将其设置为1。

突然之间,我的do-while循环无法正常运行。我已经尝试过移动一些东西,检查语法并更改目录,但是没有任何效果。

为什么用作重复文件方法的do-while循环不起作用?

  public static void userAddition() throws IOException
  {
     boolean retry = true;
     String formattedUserId = "";
     Random randomNumbers = new Random();
     int userId;
     final int MAX_RETRIES = 10;


     int retryCount = 0;
     do
     {
        retryCount++;
        userId = randomNumbers.nextInt(1);
        formattedUserId = String.format("%04d", userId);
        File f = new File("C:/Users/Nick/Desktop/Library" + formattedUserId + ".txt");
        retry = f.exists();
      }
      while (retry && retryCount < MAX_RETRIES);




      if (retry)
      {
        System.out.println("Error");
      }
      else
      {
        // happy path
        String userFirstName = JOptionPane.showInputDialog("Enter the customer's first name:");
        String userLastName = JOptionPane.showInputDialog("Enter the customer's last name:");



        FileWriter fw = new FileWriter(formattedUserId + ".txt", true);
        PrintWriter outputFile = new PrintWriter(fw);

        outputFile.printf("#%s%n", formattedUserId);
        outputFile.printf("%s %s", userFirstName, userLastName);

        System.out.println(formattedUserId);
        outputFile.close(); 
      }

   }

}

我希望do-while循环运行10次,然后再点击MAX_RETRIES并显示“错误”。

1 个答案:

答案 0 :(得分:0)

您测试文件C:/Users/Nick/Desktop/Library0000.txt是否存在:

File f = new File("C:/Users/Nick/Desktop/Library" + formattedUserId + ".txt");

然后,您在项目文件夹中创建名为0000.txt的文件:

FileWriter fw = new FileWriter(formattedUserId + ".txt", true);

因此,您的存在性测试将从不返回true:)

简单的解决方法是将计算出的文件名存储在变量中:

String fileName = String.format("C:/Users/Nick/Desktop/Library/%04d.txt", userId);
File f = new File(fileName);
...

FileWriter fw = new FileWriter(fileName, true);

顺便看看try-with-resources,您应该使用它,如下所示:

try (Writer writer = new PrintWriter(FileWriter(fileName, true))) {
    writer.printf("#%s%n", formattedUserId);
    writer.printf("%s %s", userFirstName, userLastName);
    // notice: no close(), this is handled automatically and better!
}