【问题标题】:Problem printing the lines of a file Java打印文件Java行的问题
【发布时间】:2018-12-08 23:36:36
【问题描述】:

我正在学习如何用 Java 读写文件。做了很多例子,但在这个具体案例中我遇到了问题,只是不知道为什么,因为就我而言,与其他例子相比没有任何变化。也许只是一个我看不到的愚蠢错误。显然,名为“naval.txt”的文件是在相应的源上创建并保存的。这是我的代码:

public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new FileReader("naval.txt"));
            String line;

            while (((line = br.readLine()) != null)) {
                Scanner sc = new Scanner(line);
                System.out.println(sc.next());

            }

        } catch (IOException e) {
            e.getMessage();
            System.out.println("Not possible to read the file");
        }

    }

它甚至不读它。如果我运行它,它会显示我为“catch(Exception e)”写的消息。 十分感谢。

【问题讨论】:

  • 你得到什么异常?在您的异常处理程序中执行e.printStackTrace()
  • 在您的while 循环中,您可以只使用System.out.println(line); - 您不需要Scanner。但严肃地说,正如 jbx 建议的那样,将 e.printStackTrace(); 添加到您的 catch 块中,这样您就可以看到实际问题是什么。可能是该文件位于错误的目录中,或者没有读取权限,或类似的情况。
  • 您可能在查找文件时遇到问题。注意你的 e.getMessage 方法。你基本上只是调用一个返回字符串消息的方法,但你没有对它做任何事情。确实尝试 e.printStackTrace() 并查看异常情况。您也可以只打印消息异常: System.out.println(e.getMessage());
  • 谢谢。读取文件确实有问题。解决了。谢谢大家的回答。

标签: java file bufferedreader


【解决方案1】:

您混合了 2 种不同的方式来读取文件,结果是错误的。
Scanner 对象没有构造函数,将字符串作为参数。
只需使用Scanner 打开文件并读取其中的行:

public static void main(String[] args) {
    try {
        Scanner sc = new Scanner(new File("naval.txt"));
        String line;
        while (sc.hasNext()) {
            line = sc.nextLine();
            System.out.println(line);
        }   
    } catch (IOException e) {
        System.out.println(e.getMessage() + "\nNot possible to read the file");
    }
}

【讨论】:

  • 我运行调试器,创建了所有断点,但它甚至不读取文件。
【解决方案2】:

为了完整起见,这是一个仅使用 BufferedReader 的等效解决方案。如其他答案所述,您不需要ScannerBufferedReader

try {
   BufferedReader br = new BufferedReader(new FileReader("naval.txt"));
   String line;

   while (((line = br.readLine()) != null)) {
      System.out.println(line);
   }
} catch (IOException e) {
   System.out.println("Not possible to read the file");
   e.printStackTrace();
}

【讨论】:

  • 谢谢 :) 问题是,我需要行中的每个单词,这就是我有扫描仪的原因..
【解决方案3】:

如果您使用的是 java-8,则可以使用单行来实现:

Files.lines(Paths.get("naval.txt")).forEach(System.out::println);

【讨论】:

    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 2011-09-02
    • 2021-12-20
    • 1970-01-01
    • 2023-01-05
    • 2021-08-17
    • 2015-01-04
    • 2020-06-20
    相关资源
    最近更新 更多