我是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)
为什么呢?我发现似乎解决了这个问题的一件事就是取代" File"使用" FileReader",但我不确定为什么会有效。
答案 0 :(得分: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和扫描仪的更多信息: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);
}
}