Java IO NOSCHELEMENTEXCEPTION抛出,除非在使用相对路径时修改文档

Java IO NOSCHELEMENTEXCEPTION抛出,除非在使用相对路径时修改文档,java,io,Java,Io,我正在尝试读取文件中的一些数字,该文件类似于: TestFile.txt: 4 900 1100 1000 1200 400 1100 5000 5100 主要内容: import java.io.*; 导入java.util.*; 公开课考试{ 私有静态int[][]数据; 公共静态void main(字符串[]args)抛出FileNotFoundException、IOException{ File File=新文件(“TestFile.txt”); 扫描仪=新扫描仪(文件); int

我正在尝试读取文件中的一些数字,该文件类似于:

TestFile.txt:

4
900 1100
1000 1200
400 1100
5000 5100 
主要内容:

import java.io.*;
导入java.util.*;
公开课考试{
私有静态int[][]数据;
公共静态void main(字符串[]args)抛出FileNotFoundException、IOException{
File File=新文件(“TestFile.txt”);
扫描仪=新扫描仪(文件);
int length=scanner.nextInt();
数据=新整数[长度][2];
for(int i=0;i
如果我运行这个,它工作正常。但是,如果我再次尝试运行它,它会给我
java.util.NoSuchElementException
。如果我修改文件,(通过添加空格或其他东西),程序将再次工作

为什么会这样?(并解释我能做些什么来解决这个问题,因为一次又一次地重新保存文件会让人感到恼火。)

如果你想知道的话,我正在网络豆上运行它

编辑:


在做了一些实验之后,我注意到这个问题只有在我给它一个相对路径而不是绝对路径时才会出现。我最初通过netbeans项目属性添加了该文件,并将该文件作为参数添加。也许这就是问题的一部分?是否有办法保持相对路径,但使问题消失?

请给我们一个@MikeNakis,它是否太长或不起作用?它不完整,即不自包含。如果将其包装在
main()
(并添加两个
#include
s)中,它将是。但是我非常怀疑上面用
main()
包装的代码是否显示了您所描述的行为。请记住,您可以使用ideone.com。代码看起来很好,我无法复制。你说的“再运行一次”是什么意思?该行为听起来好像输入文件从未关闭,您正在尝试读取文件的结尾。您必须更详细地描述您正在做的事情。@JimGarrison我进入文本文件,添加空格或其他内容,然后保存它。然后我按下netbeans给我的run按钮,代码不会抛出异常。我对IO不太了解,但我关闭了扫描仪。我还得做点别的吗?
import java.io.*;
import java.util.*;

public class Test {
    private static int[][] data;

    public static void main(String[] args) throws FileNotFoundException, IOException{

        File file = new File("TestFile.txt");

        Scanner scanner = new Scanner(file);
        int length = scanner.nextInt();

        data = new int[length][2];

        for(int i = 0; i < length; i++) {
            data[i][0] = scanner.nextInt(); //throws exception here
            System.out.print( data[i][0] + " ");
            data[i][1] = scanner.nextInt(); 
            System.out.print( data[i][1] + "\n");
        }


        scanner.close();
    }
}