我正在创建一个项目,当用户想要添加客户时,会随机生成一个“ 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并显示“错误”。
答案 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!
}