我正在尝试读取一个大的(700GB)文件并逐步处理它,但我正在处理的网络偶尔会关闭,切断对该文件的访问.这会抛出一个java.io.IOException告诉我“指定的网络名称不再可用”.是否有一种方法可以捕获此异常并等待,例如,十五分钟,然后重试读取,或者一旦访问该文件丢失,读取器对象是否被炒掉?
如果连接丢失后读取器变得无用,有没有办法可以重写这个,以便让我“保存我的位置”,然后从那里开始我的读取,而不必阅读和丢弃所有之前的数据呢?即使只是在没有处理数据的情况下咀嚼数据也需要花费很长时间才能完成500GB的数据.
目前,代码看起来像这样(为简洁起见编辑):
class Processor {
BufferedReader br;
Processor(String fname) {
br = new BufferedReader(new FileReader("fname"));
}
void process() {
try {
String line;
while((line=br.readLine)!=null) {
...code for processing the line goes here...
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
感谢您的时间.
最佳答案
您可以跟踪变量中的读取字节.例如,我在这里跟踪一个名为read的变量,buff就是char [].不确定使用readLine方法是否可行.
read+=br.read(buff);
然后,如果您需要重新启动,则可以跳过那么多字节
br.skip(read);
然后你可以继续处理.祝好运