Невозможно прочитать последнюю строку файла, l oop не введено - PullRequest
0 голосов
/ 15 апреля 2020

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

public static ArrayList<String> readInput() {
        // TODO Auto-generated method stub
        ArrayList<String> input = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);


//      while (scanner.hasNextLine()) {
//          String line = scanner.nextLine();
//          if (line.equals("") || line.isEmpty()) {
//                break;
//            }  
//           input.add(line);
//           System.out.println(line);
//      }
        String line;
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        try {
            while((line = reader.readLine()) != null && !line.isEmpty()) {

                input.add(line);
                System.out.println(line);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            JOptionPane.showMessageDialog(null,"File not found or is unreadable.");
        }finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //PROGRAM WILL NOT GO BEYOND THIS POINT.
        JOptionPane.showMessageDialog(null,"File has finished reading.");
         return input;

Здесь я попробовал два метода. Один с буферизованным считывателем, а другой со сканером, но ни один не работает. Вот фрагмент файла .txt:

...some more lines...
33
0 0 0
1 0 0
0 1 0
34
0 0 0
1 0 0
1 0 0
35
0 1 0
0 1 0
0 0 1
36
1 0 0
0 1 0
0 1 0

Программа будет читать до второй последней строки. Так что это будет то, что я вижу:

...some lines...
0 0 1
36
1 0 0
0 1 0

и программа все еще будет работать. Он даже не будет вводить повторно, пока l oop (я проверял его с помощью println).

Даже если бы я добавил пустую строку после последней строки, вот так:

...some lines...
0 0 1
36
1 0 0
0 1 0
0 1 0
<a blank line>

Программа будет читать до последней строки чисел, не сможет повторно ввести l oop, и программа не прекратит работу.

...some lines...
0 0 1
36
1 0 0
0 1 0
0 1 0

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

Предпочтительно, я хотел бы следовать сценарию 1, где я не заканчиваю текстовый файл пустой строкой.

также каждая строка файла .txt заканчивается новой строкой и не содержит конечных пробелов. Спасибо!

1 Ответ

0 голосов
/ 15 апреля 2020

Вам нужен символ EOF для завершения вашей программы. Попробуйте ввести в консоли консоль CTRL-D, чтобы завершить выполнение.

...