4

我是 Java 和 NetBeans 的新手,还没有找到与我当前遇到的问题完全相同的问题。

我有这个基本代码,旨在打印现有文本文件的第一行:

14    File test = new File("C:\\Users\\Computer\\Desktop\\testfile.txt");
15    Scanner read = new Scanner(test);
16    
17    String firstline = read.nextLine();
18    System.out.println(firstline);
19  
20    read.close();

出于某种原因,相同的代码在 Dr Java 和 Windows 命令行中运行良好,但在 NetBeans 中,我不断得到这个:

Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1585)
at testfile.Testfile.main(Testfile.java:18)

为什么?我发现似乎可以解决问题的一件事是用“FileReader”替换“File”,但我不确定为什么会这样。

4

1 回答 1

1

首先,您应该检查您的扫描仪是否有一些数据。这是一个例子:

File test = new File("D:\\testfile.txt");
Scanner read = new Scanner(test);

String line;
while (read.hasNextLine()) {
    line = read.nextLine();
    // your logic
    System.out.println(line);
}
read.close();

其次,当您不检查“read.hasNextLine()”(或 read.hasNext 或其他任何 read.hasXxx 方法)时,您应该从代码中得到 2 种行为:
1- java.util.NoSuchElementException 当您的文件是
2-您将打印第一行。
-> 我用 Java7u13 测试了 NetBeans 7.3 RC1,它可以正常工作。

在这里您可以找到有关 I/O 和 Scanner 的更多信息:http: //docs.oracle.com/javase/tutorial/essential/io/scanning.html

这是使用 try-with-resources 的新 Java 7 方式,它会自动为您创建和关闭 Scanner。(您可以使用所有实现接口 Closeable 的对象来获取此信息)

File test = new File("D:\\testfile.txt");
try (Scanner read = new Scanner(test)) {
    String line;
    while (read.hasNextLine()) {
    line = read.nextLine();
    // your logic
    System.out.println(line);
    }
}
于 2013-02-07T19:57:06.280 回答