Java中是否有更有效的方法从文件中读取数字?

时间:2015-07-22 03:13:25

标签: java

我有一个简单的输出文本文件,名为logOutput.txt

  

2

     

3

     

4

我希望我的Java程序能够在文件中提供最新的程序(4)。这是我的代码:

import java.util.*;
import java.io.*;

public class readLogFile {

    public static void main(String[] a) {
        int logNumber = 0;

        try {

            File file = new File("logOutput.txt");
            Scanner input = new Scanner(file);
            while (input.hasNext()) {
                logNumber = input.nextInt();

            }

            System.out.println("the log # is: " + logNumber);

        } catch (FileNotFoundException fne) {

        }
    }

}// end class

我关心的主要是关于while循环。有没有更有效的方法?在这里,我将每行读入变量,然后重写。我在想 - 可能要检查nextInt何时为空?

谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用Integer.parse()

检查输入

在你的while循环中:

String s = input.nextLine();
try{
    int i = Integer.parseInt(s);
    logNumber = i; 
} catch(NumberFormatException ex) {
    System.out.println("It is not an int");
}

如果该行不是整数或null,则抛出异常。

答案 1 :(得分:1)

因此,至少有两种方法可以读取与此相关的文件。

  1. 将整个文件读入String(或byte []),然后立即解析整个文件。这对于较大的文件来说非常失败,并且可能不会更快。
  2. 将文件的一部分读入缓冲区,解析,然后重复,直到没有更多文件。
  3. 第二种方式对内存的效率更高,因为你只记录了你可以在任何时候处理的内存。通过他们在这里做的方式,你有一个真正的,非常长的线(如果他们从未打'输入'怎么办?)的单一失败案例,但除此之外,这是安全的......将工作分成机器可以随时装入RAM的东西。

    是的,你会多次覆盖这个值,但是每次输入只会一次,所以它不能成为指数级别的错误,并将内容写入RAM很便宜这很可能和它一样有效;调整这个的唯一原因是如果你处理非常非常大的输入集。