从IOException恢复:网络名称不再可用

时间:2011-11-08 20:53:38

标签: java file-io exception-handling io ioexception

我试图读取一个大的(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();
        }
    }
}

感谢您的时间。

2 个答案:

答案 0 :(得分:4)

您可以跟踪变量中的读取字节。例如,我在这里跟踪一个名为read的变量,buff就是char []。不确定使用readLine方法是否可行。

read+=br.read(buff);

然后,如果您需要重新启动,则可以跳过那么多字节

br.skip(read);

然后你可以继续处理。祝你好运

答案 1 :(得分:0)

我怀疑在此错误之后底层fd仍然可用,但您必须尝试它。更可能的是,您将不得不重新打开文件并跳到您所在的位置。