有没有办法使用try / catch语句要求用户输入文件,如果用户输入错误的文件名,程序会再问两次,然后退出异常?我怎么能循环?因为一旦用户输入了错误的文件名,程序就会立即抛出异常。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Main {
static String[] words = new String[5];
public static void main(String[] args)
{
Scanner kb = new Scanner(System.in);
System.out.println("enter file name:");
String fileName = kb.next();
try {
File inFile = new File(fileName);
Scanner in = new Scanner(new File(fileName));
} catch (FileNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
答案 0 :(得分:2)
所以你不希望它在用户输入错误的文件名时抛出任何错误,对吧?如果是这样,那么我认为这就是你想要的:
for(int i = 0; i < 3; i++){
try {
File inFile = new File(fileName);
Scanner in = new Scanner(new File(fileName));
break;
} catch (FileNotFoundException ex) {
if(i == 2){
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
System.exit(0);
}
else
continue;
}
}
如果用户输入正确的文件名,它将跳出循环。如果没有,它会检查循环是否在它的第三次迭代。如果是,(这意味着用户尝试过两次失败),它会输出错误并退出程序。如果循环没有进行第三次迭代,它将继续循环并重新提示用户。
答案 1 :(得分:0)
假设您创建了一个boolean fileIsLoaded = false,并将其设置为true。你可以创建一个循环
for(int i=0;i<2 && !fileIsLoaded; i++) {
//your try/catch goes here
}
将当前main中的所有代码包含在该循环中(预先创建布尔值)。最后,如果所有尝试都失败,您可以检查布尔值。
答案 2 :(得分:0)
我希望扫描器构造函数抛出FileNotFoundException是显而易见的。那么为什么要使用它直到你确定该文件存在?在获得正确的文件之前,不应创建Scanner对象! 要实现这个想法,请在try块中使用它:
//read file name from stdio
File inFile = new File(fileName);
int i = 0;
while(!inFile.exists() && i++ < 2 ){
//read file name from System.in;
inFile = new File(fileName);
}
Scanner in = new Scanner(new File(fileName));