我正在创建一个打开的程序,然后读取用户指定的文件,目前我的代码如下:
System.out.println("Enter the name of the file you want to open: ");
FileN = scan.nextLine();
// I want the program to return to this point here if an error has occured.
try
{
scan = new Scanner(new File (FileN));
}
catch(Exception e)
{
System.out.println("Could not find file" + e);
System.out.println("Please enter a valid file name: ");
}
我已经在上面指定了我希望程序在代码中返回的地方,我目前尝试创建一个循环然后使用continue但是它不会让我在循环中尝试。我也试图创造一个新的空白,它仍然无法运作。目前,即使用户输入了无效的文件名,程序也会继续运行。
我已经搜索了一个答案,只能找到与我想要的相关的内容:Java - Exception handling - How to re-enter invalid input
通过尝试循环来澄清我的意思;对的,这是可能的。但是我想知道是否继续在我的程序中工作,我把try放在循环中还是在try里面循环?我提到过:Should try...catch go inside or outside a loop?
答案 0 :(得分:1)
您的问题是您的操作顺序不好。这是您的订单:
我建议采用这种方法:
简而言之,我的方法是:
回到你的问题:创建一个循环,询问文件名,直到File.exists()
返回true。也许还要检查File.isFile()
(这样人们就无法输入目录)。
仅在循环后创建扫描仪。它仍然会抛出一个异常(Java不知道你已经确定该文件存在)。但异常处理程序代码不需要请求文件名(因此没有循环)。
答案 1 :(得分:0)
如果您使用Exception意味着使用它来处理意外事件,那么它会变得容易一些。不存在的文件实际上并不是一个例外,因为它是预期的。文件已存在但无法打开或打开但内容为零,即使它具有1MB内容也是意外的,因此是异常。考虑到不存在的文件的预期行为(因为用户输入的文件可能输错了),您可以使用以下内容:
boolean fileExists = false;
File newFile;
while(!fileExists) {
System.out.println("Enter the name of the file you want to open: ");
FileN = scan.nextLine();
newFile = new File(FileN);
fileExists = newFile.exists();
if (!fileExists) {
System.out.println(FileN + " not found...");
}
}
try {
Scanner scan;
scan = new Scanner(newFile);
... do stuff with the scanner
}
catch(FileNotFoundException fnfe) {
System.out.println("sorry but the file doesn't seem to exist");
}
答案 2 :(得分:-1)
你可以尝试一下while循环:
boolean again =true;
while(again){
FileN = scan.nextLine();
try
{
scan = new Scanner(new File (FileN));
again=false;
}
catch(Exception e)
{
System.out.println("Could not find file" + e);
System.out.println("Please enter a valid file name: ");
}}