作业:使用循环验证文件不存在

时间:2011-01-12 04:53:30

标签: java

              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();
    }

一旦循环被存在的文件名触发,即使输入不存在的文件名,它仍然会重复。为什么呢?

6 个答案:

答案 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