你如何通过FileReader获得异常

时间:2015-09-29 01:12:09

标签: java exception

我正在尝试让用户输入他们的文件名。如果文件名有效则会通过。但是,如果文件名无效,则假定再次询问用户文件。如果故意输入无效的文件名,程序就不会通过异常分支。

以下是代码:

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

1 个答案:

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