当我执行我的程序时,一个简单的文件阅读器,我得到一个例外。
我的文件保存在.java文件旁边。
运行:
姓名:Koen
得分:44
线程“main”java.util.NoSuchElementException中的异常:找不到行 姓名:Kevin
得分:55
在java.util.Scanner.nextLine(Scanner.java:1585)
at tetris.FileIO.loadHighscores(FileIO.java:41)
在tetris.FileIO.getLineScores(FileIO.java:28)
在tetris.FileIO.main(FileIO.java:62)
Java结果:1
建立成功(总时间:0秒)
package tetris;
import java.io.File;
import java.io.InputStream;
import java.io.Writer;
import java.util.Scanner;
public class FileIO {
private File file;
private Scanner filescScanner, lineScanner;
private Writer fileWriter, lineWriter;
private String[][] data;
public FileIO () {
String[][] data = new String[100][1];
}
public String[][] getLineScores(){
return this.loadHighscores(this.getClass().getResourceAsStream("LineHighscores.txt"));
}
public String[][] getTimeScores(){
return this.loadHighscores(this.getClass().getResourceAsStream("TimeHighscores.txt"));
}
public String[][] loadHighscores( InputStream resourceStream){
int x=0;
String test = "";
filescScanner = new Scanner(resourceStream);
while((test=filescScanner.nextLine())!=null) {
lineScanner = new Scanner(test);
lineScanner.useDelimiter("-/-");
System.out.println("name : "+lineScanner.next());
System.out.println("score : " +lineScanner.next());
x++;
}
lineScanner.close();
filescScanner.close();
return data;
}
public static void main(String[] args){
FileIO file = new FileIO();
System.out.println(file.getLineScores());
}
}
答案 0 :(得分:4)
当您调用nextLine()时:
while((test=filescScanner.nextLine())!=null)
投掷exception表示扫描仪没有更多输入线。因此,它永远不会返回null。
请尝试使用hasNextLine()
检查是否有下一行。
while(filescScanner.hasNextLine())
{
test=filescScanner.nextline();
...
}
hasNextLine
public boolean hasNextLine()
返回:当且仅当此扫描器具有另一行输入(source)
时才返回true
因此,当扫描仪无法再阅读任何输入行时,hasNextLine()
将返回false
。因此,终止循环。
答案 1 :(得分:0)
如果我理解正确的话,你希望while循环终止,当文件中没有更多的行可以读取时。 Scanner类实现了一个hasNextLine方法,当有一行要读取时返回true,否则返回false。我认为你可以用scanner.hasNextLine()替换while条件,这将解决在第41行引发的NoElementException。我希望你觉得这个答案很有帮助。
祝你好运 尼古拉