String filename1; //file name to write to
//get the file name to write to
System.out.println("\nEnter the filename for the file where the information will be stored:");
filename1=keyboard.nextLine();
File title1= new File(filename1);
while (title1.exists()) //make sure the file doesn't exist
{
System.out.println("The file " + filename1 +" already exists.");
System.out.println("Please choose another name.");
System.out.println("Enter the filename:");
filename1=keyboard.nextLine();
}
一旦循环被存在的文件名触发,即使输入不存在的文件名,它仍然会重复。为什么呢?
答案 0 :(得分:1)
对于每次迭代,你实际上并没有测试是否存在新文件,只是在循环之前对title1进行实例化时测试.exists()。对于循环的每次迭代都是如此。
答案 1 :(得分:0)
因为在你的while循环中没有修改title1
的位置。
答案 2 :(得分:0)
循环不会退出,因为title1
仍然指向旧文件(已存在的文件)。您需要更新变量:
String filename1; //file name to write to
//get the file name to write to
System.out.println("\nEnter the filename for the file where the information will be stored:");
filename1=keyboard.nextLine();
File title1= new File(filename1);
while (title1.exists()) //make sure the file doesn't exist
{
System.out.println("The file " + filename1 +" already exists.");
System.out.println("Please choose another name.");
System.out.println("Enter the filename:");
filename1=keyboard.nextLine();
title1 = new File(filename1);
}
答案 3 :(得分:0)
为什么?
因为您没有更新title1
。实际上,您继续测试用户提供的第一个(不存在的)文件名。
代码中还有另一个(相当模糊的)错误。如果用户输入EOF字符(例如^ D),则对readLine()
的调用将返回null
,然后您的代码将尝试在空引用上调用exists()
...产生NullPointerException
。
答案 4 :(得分:0)
如果存在或不存在,您始终检查第一个文件,您应该使用新文件名
对其进行初始化 File title1= new File(filename1);
while (title1.exists()) //make sure the file doesn't exist
{
System.out.println("The file " + filename1 +" already exists.");
System.out.println("Please choose another name.");
System.out.println("Enter the filename:");
filename1=keyboard.nextLine();
title1= new File(filename1);
}
答案 5 :(得分:0)
当你这样做时:
filename1=keyboard.nextline();
您所做的只是更新filename1
中保存的字符串值。尽管您在创建filename1
时使用了title1
,但这种关系并没有像您想象的那样得到维护。
您需要做的是使用新文件名创建一个新文件,然后再次执行相同的测试:
filename1=keyboard.nextLine();
// re-create file 1 with the new filename stored in filename1
通常,在自己的变量中存储控制变量(表示是否继续执行循环的位)通常更好,而不是调用方法:
Boolean fileExists = title1.exists();
while(fileExists) {
....
}
这将使您的代码看起来像这样:
filename1=keyboard.nextLine();
// re-create file 1 with the new filename stored in filename1
// update the fileExists variable to reflect if the new file exists or not