我正在尝试让用户输入他们的文件名。如果文件名有效则会通过。但是,如果文件名无效,则假定再次询问用户文件。如果故意输入无效的文件名,程序就不会通过异常分支。
以下是代码:
public class LineNumbers {
private static Scanner getFile() {
Scanner in = new Scanner(System.in);
Scanner scannedFile = new Scanner(System.in);
String inputFile;
boolean validFile = false;
while (!validFile) {
try {
System.out.print("Enter your file name: ");
inputFile = in.nextLine();
scannedFile = new Scanner(new FileReader(inputFile));
validFile = true;
} catch (Exception e) {
System.out.print(e);
System.out.print("Invalid File");
in.next();
scannedFile.next();
}
}
return scannedFile;
}
public static void main(String[] args) {
String word = getFile().nextLine();
}
}
答案 0 :(得分:1)
在catch块中调用in.next();
和scannedFile.next();
时遇到问题。如果发生无效的用户输入,您已经预料到in.readLine()。此外,您应该了解scannedFile
是可以访问的,这就是获得异常的原因。因此,您也无法在scannedFile.next();
块中使用catch
。
执行以下修改
private static Scanner getFile() {
Scanner in = new Scanner(System.in);
Scanner scannedFile = new Scanner(System.in);
String inputFile;
boolean validFile = false;
while (!validFile) {
try {
System.out.print("Enter your file name: ");
inputFile = in.nextLine();
scannedFile = new Scanner(new FileReader(inputFile));
validFile = true;
} catch (Exception e) {
System.out.println(e);
System.out.println("Invalid File");
//no scanned file, input file could not find
scannedFile = null;
//file was not valid
validFile = false;
}
}
return scannedFile;
}