gpt4 book ai didi

java - 在Java中恢复读取巨大的文本文件

转载 作者:行者123 更新时间:2023-11-30 03:10:08 26 4
gpt4 key购买 nike

我正在阅读一个巨大的单词文本文件(每行一个单词),但我必须不时停止它才能在第二天继续阅读。现在我正在使用 Apache 的 lineiterator,但这完全是错误的解决方案。我的文件有 7Gb,当文件大小达到 1Gb 时我不得不中断阅读。为了恢复读取,我保存了已读取的行数。这意味着我在 while 循环中有一个 if 语句。 Apache 的 FileUtils 不允许查找,所以这是我的解决方案。

最好/最快的解决方案是什么?我想使用 RandomAccessfile 到达正确的行并继续阅读,但我不确定是否可以到达正确的位置以及如何保存我上次阅读的正确位置。我可以再读几行,所以精度不是那么重要,但我还没有找到获取指针的方法。我有一个 BufferedReader 来读取文件,还有一个 RandomAccessFile 来寻找正确的位置,但我不知道如何定期使用 BufferedReader 保存位置。有什么提示吗?

代码:(注意“SOMETHING”,我应该在其中打印我可以在eekToByte上使用的值)

try {

RandomAccessFile rand = new RandomAccessFile(file,"r");
rand.seek(seekToByte);
startAtByte = rand.getFilePointer();
rand.close();

} catch(IOException e) {
// do something
}

// Do it using the BufferedReader
BufferedReader reader = null;
FileReader freader = null;
try {
freader = new FileReader(file);
reader = new BufferedReader(freader);
reader.skip(startAtByte);

long i=0;
for(String line; (line = reader.readLine()) != null; ) {

lines.add(line);
System.out.print(i+" ");
if (lines.size()>1000) {
commit(lines);
System.out.println("");
lines.clear();
System.out.println(SOMETHING?);
}
}

} catch(Exception e) {
// handle this
} finally {
if (reader != null) {
try {reader.close();} catch(Exception ignore) {}
}
}

最佳答案

RandomAccessfile 确实是一种方法。使用

long position = file.getFilePointer();

当您停止阅读以保存文件中的位置,然后使用以下命令恢复时:

file.seek(position);

在同一位置继续阅读。

但是,使用RandomAccessfile时要小心,因为它的readLine方法不完全支持Unicode。

关于java - 在Java中恢复读取巨大的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33764828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com