从Java中的文本文件中读取特定行

Llu*_*nez 21 java apache-commons-io

有没有方法从文本文件中读取特定的行?在API或Apache Commons中.就像是 :

String readLine(File file, int lineNumber)
Run Code Online (Sandbox Code Playgroud)

我同意它的实现是微不足道的,但如果文件非常大,它的效率并不高.

Boz*_*zho 17

String line = FileUtils.readLines(file).get(lineNumber);
Run Code Online (Sandbox Code Playgroud)

会这样做,但它仍然存在效率问题.

或者,您可以使用:

 LineIterator it = IOUtils.lineIterator(
       new BufferedReader(new FileReader("file.txt")));
 for (int lineNumber = 0; it.hasNext(); lineNumber++) {
    String line = (String) it.next();
    if (lineNumber == expectedLineNumber) {
        return line;
    }
 }
Run Code Online (Sandbox Code Playgroud)

由于缓冲区,这将稍微更有效.

看看Scanner.skip(..)并尝试跳过整行(使用正则表达式).我不知道它是否会更有效 - 基准它.

PS有效率我的意思是内存效率


And*_*yle 5

不是我知道的.

请注意,对于行开始的位置,文件没有特定的索引,因此任何实用程序方法都可以完全有效:

BufferedReader r = new BufferedReader(new FileReader(file));
for (int i = 0; i < lineNumber - 1; i++)
{
   r.readLine();
}
return r.readLine();
Run Code Online (Sandbox Code Playgroud)

(当然,有适当的错误处理和资源关闭逻辑).