我的do while循环遇到麻烦,要求用户提供新文件是前一个文件不起作用

问题描述 投票:0回答:1

我正在编写一些代码,该代码先获取用户文件,然后对信息进行排序,但是我在编写程序时遇到了麻烦,因此,如果用户输入了错误的文件名,该程序将不会停止,而是给他们另一个机会输入正确的文件。

我以为我可以通过do来做到这一点,这就是说要求文件在不存在但似乎无法正常工作时重复读取文件

public void readText(int ages[], String names[]) throws FileNotFoundException{
    String filename = "";
    Scanner inputFile = new Scanner(System.in);
    do {
        System.out.println("File to read from:");
        filename = inputFile.nextLine();
        File file = new File(filename);
        inputFile = new Scanner(file);
        }
    while (!new File(filename).exists());
        while (inputFile.hasNextLine()) {
            String data = inputFile.nextLine();
            String[] parts = data.split("(?<=\\))(?=\\()");
            for (String part : parts) {
                String input = part.replaceAll("[()]", "");
                ages[count] = Integer.parseInt(input.split(", ")[0]);
                names[count] = input.split(", ")[1];
                count++;

            }
        }
}

[当我尝试输入一个不存在的伪文件时,它会要求文件再次读取我得到的内容和异常。例:要读取的文件:none.txt(不存在,只是要它再次问我)然后它给了我下面的例外:

Exception in thread "main" java.io.FileNotFoundException: nothing.txt (The system cannot find the file specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.util.Scanner.<init>(Scanner.java:611)
at PonySort.readText(PonySort.java:95)
at PonySort.main(PonySort.java:30)
java exception do-while
1个回答
-1
投票

您正在尝试使用第一个Scanner循环中的文件创建一个do-while,该文件会导致FileNotFoundException。因此,请在找到有效文件后执行以下操作。

public void readText(int ages[], String names[]) throws FileNotFoundException{
    String filename = "";
    Scanner inputFile = new Scanner(System.in);
    File file;
    do {
        System.out.println("File to read from:");
        filename = inputFile.nextLine();
        file = new File(filename);
    } while (!file.exists());

    inputFile = new Scanner(file);

    while (inputFile.hasNextLine()) {
        String data = inputFile.nextLine();
        String[] parts = data.split("(?<=\\))(?=\\()");
        for (String part : parts) {
            String input = part.replaceAll("[()]", "");
            ages[count] = Integer.parseInt(input.split(", ")[0]);
            names[count] = input.split(", ")[1];
            count++;

        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.