如何读取文件的行号n到行号m的行?

suj*_*ith 2 java file readline

有没有办法可以从文件中读取行号n到行号m的行?

换句话说,我有一个超过100k条目的文件.我想一次加载10k行,处理它们然后加载下一行10k行,以便在有限的内存资源下运行.有没有办法实现这个目标?

Dic*_*ici 6

你无法以任意一行开始阅读,但这不是你在问题的第二部分所说的.你想要的是以下内容,如果可以保存整个过程的资源:

int batchSize = 10000;
try (BufferedReader br = Files.newBufferedReader(file.toPath())) {
    boolean eof = false;
    while (!eof) {
        List<String> batch = new ArrayList<>(batchSize);
        for (int i=0 ; i<batchSize ; i++) {
            String line = br.readLine();
            if (eof = line == null) break;
            batch.add(line);
        }
        processBatch(batch);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您想尽快释放资源,那么让生产者按批次的10 000行分割文件,而消费者按顺序处理它们可能是个更好的主意.这可以通过两个线程和一个非常容易地实现BlockingQueue<File>.