Java 如何从文件的行号n到行号m读取行?
有没有一种方法可以从文件中读取从行号n到行号m的行Java 如何从文件的行号n到行号m读取行?,java,file,readline,Java,File,Readline,有没有一种方法可以从文件中读取从行号n到行号m的行 换句话说,我有一个超过100k条目的文件。我希望一次加载10k行,处理它们,然后加载下一个10k行,以便在有限的内存资源下运行。有什么方法可以做到这一点吗?你不能从任意一行开始阅读,但这不是你在问题的第二部分所说的。如果可以在整个过程中保留资源,您需要的是以下内容: int batchSize = 10000; try (BufferedReader br = Files.newBufferedReader(file.toPath())) {
换句话说,我有一个超过100k条目的文件。我希望一次加载10k行,处理它们,然后加载下一个10k行,以便在有限的内存资源下运行。有什么方法可以做到这一点吗?你不能从任意一行开始阅读,但这不是你在问题的第二部分所说的。如果可以在整个过程中保留资源,您需要的是以下内容:
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);
}
}
int batchSize=10000;
try(BufferedReader br=Files.newBufferedReader(file.toPath())){
布尔eof=假;
而(!eof){
列表批次=新的ArrayList(batchSize);
对于(int i=0;我为什么不仅仅使用BufferedReader
?如果你使用readLine
,你已经在使用BufferedReader
,对吗?使用,这是一个BufferedReader
,支持行号。@Jean Logeart是的,我已经在使用BufferedReader了,但是为了获取第二批,我从一开始就开始了删除文件并跳过所有已提取的行。这是一项成本高昂的操作,而且,当批大小很小且总行数太多时,这将在时间上产生大量开销。是否有任何方法可以避免这种情况。@Andreas:您能给我举个例子,比如如何从n行提取到n行吗m通过使用LineNumberReader和BufferedReader?我可以使用LineNumberReader访问一行。您能告诉我如何使用BufferedReader从该行获取行,而不跳过n行之前的所有行吗?嗨,第一批可以很容易地获取,但我最终会跳过已获取批中的所有行ch下一批。这将导致时间延迟。实际上,我正在尝试一次从文件中批量获取所有行,共10k行。@Dici我发现最好用一个额外的括号澄清(eof=line==null)
:(eof=(line==null))
@Dici内联赋值通常是错误的,因此如果(line==null)可能是{eof=true;break;}
更好。