如何从Java中的文本文件中读取Integer

时间:2017-06-12 18:35:27

标签: java

我正在尝试读取一个包含java中整数值的文件,我找到了以下答案:

Java: Reading integers from a file into an array

但我的代码陷入无限循环。

我的代码是:

Scanner scanner = new Scanner(new File("/home/lalit/Desktop/Project/key_x.txt"));
        //Scanner scanner1 = new Scanner(new File("/home/lalit/Desktop/Project/key_y.txt"));

           int i = 0,count=0;
           while(scanner.hasNextInt())
           {
                System.out.println("This is count "+count);
               count++;
           }

上面的代码无限循环。

我的文字文件包含:

317

40

280

10

318

24

456

126

4

129

404

468

287

275

165

我还有一个问题,当我尝试将元素存储在int数组中然后抛出异常;

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at Hybrid.Image.main(Image.java:503) 

我存储数组元素的代码是:

  int tall[] =new int[count];
   int tall1[] =new int[count];
   while(scanner.hasNextInt())
   {
        int k=scanner.nextInt();
        tall[i] =k;
        System.out.println(tall[i]);
        i++;
   }

4 个答案:

答案 0 :(得分:4)

循环永远不会结束,因为条件永远不会改变。您只检查扫描仪是否 a"下一个int",您实际上从未真正读过int。因此,它随时可以阅读文件中的第一个int

如果您不关心int是什么,只想从扫描仪中读取它,您可以这样做,只需忽略该值:

while(scanner.hasNextInt())
{
    scanner.nextInt();
    System.out.println("This is count "+count);
    count++;
}

或者,如果您想要对int实际执行某些操作,那么它将返回scanner.nextInt()的返回值。

答案 1 :(得分:1)

如下所示更改您的代码,因为您永远不会获取该值。

Scanner scanner = new Scanner(new File("/home/lalit/Desktop/Project/key_x.txt"));
        //Scanner scanner1 = new Scanner(new File("/home/lalit/Desktop/Project/key_y.txt"));

           int i = 0,count=0;
           while(scanner.hasNextInt())
           {
                scanner.nextInt()
                System.out.println("This is count "+count);
               count++;
           }

答案 2 :(得分:0)

当您创建Scanner时,它具有内部状态。当您使用scanner.nextXXX() API从中获取数据时,可以更改此状态。

scanner.hasNextInt() 不会更改状态。只检查它。虽然scanner.nextInt()确实改变了它的状态,然后在你下次调用它时,它会获取下一段数据。

答案 3 :(得分:0)

你忘了移动光标。

扫描仪通过读取输入流来工作。您可以想象将整个文件放在一个长字符串中,然后将光标放在它的开头。然后当你调用.hasNextInt()时,你会询问扫描器当前位置光标前面是否有整数。如果有,它将返回true但实际上不会移动光标。只有在调用nextInt()时光标才会移动。而scanner.nextInt()也将返回一个整数。