У меня проблемы с циклом do while для запроса нового файла, если предыдущий не работает - PullRequest
0 голосов
/ 01 октября 2019

Я пишу некоторый код, который берет файл пользователя, а затем сортирует информацию, но у меня возникают проблемы при написании программы, так что, если пользователь вводит неправильное имя файла, программа не остановится, а даст им еще один шанс войтиправильный файл.

Я подумал, что мог бы сделать это с помощью 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++;

            }
        }
}

Когда я пытаюсь ввести поддельный файл, который не существует, он запрашивает файл, чтобы прочитать снова, что я получаю, и исключение. Пример: файл для чтения из: nothing.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)

1 Ответ

0 голосов
/ 01 октября 2019

Вы пытаетесь создать 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++;

        }
    }
}
...