无法读取文件的最后一行,未输入循环

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

我正在尝试将.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

并且该程序仍将运行。它甚至不会重新进入while循环(我用println对其进行了测试)。

即使我要在最后一行之后添加空白行,也是如此:

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

程序将读取数字的最后一行,无法重新进入循环,并且程序将不会终止。

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

我尝试到处寻找解决方案,但似乎找不到真正解决此问题的解决方案。

最好,我想遵循方案1,其中我用空白行not结束文本文件。

.txt文件的每一行都以新行结尾,并且不包含尾随空格。谢谢!

java io java.util.scanner bufferedreader
1个回答
0
投票

您需要一个EOF字符才能终止程序。尝试在控制台中键入CTRL-D,这将结束执行。

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