我是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();
出于某种原因,同样的代码在DrJava和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",但我不确定为什么这样做有效。
首先,您应该检查扫描仪是否有一些数据。下面是一个例子:
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.hasNextRine()"(或read.hasNext或其他任何read.hasXxx方法)时,您应该从代码中期待以下两种行为:
1-java.util.NoSuchElementException当您的文件为空时
2-您将打印出第一行
->我用Java7u13测试了NetBeans 7.3 RC1,它可以正常工作。
在这里,您可以找到有关I/O和扫描仪的更多信息:http://docs.oracle.com/javase/tutorial/essential/io/scanning.html
以下是新的Java 7使用try with resources的方法,它会自动为您创建和关闭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);
}
}