网址连接问题

时间:2011-07-07 12:57:41

标签: java url

我正在使用以下代码阅读网址:

URL myURL = new URL("htpp://path_to_my_file");
try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(myURL.openStream()));

    while (reader.ready()) {
                String line = reader.readLine();
    ...
    }
} catch (IOException e) {
        throw new RuntimeException("Parsing of file failed: " + myURL, e);
}

是否会发生,文件未完全读取? (由于网络问题或其他原因?)。如果是,有没有办法测试它甚至避免?

背景:我正在开发一个应用程序(到目前为止还没有我写的),用户报告我有时会遗漏部分文件。偶尔会发生这种情况,所以我唯一的猜测是,当文件被读入时,某些东西有时会失败,但我的java背景太少,无法确定......

2 个答案:

答案 0 :(得分:4)

是的,根据Reader.readLine docs获得 IOException ,您就会知道发生了这种情况。

所以你需要捕获异常,如下所示:

try {
    while (reader.ready()) {
            String line = reader.readLine();
    }
}
catch(IOException e) {
 // Bah! Humbug!
 // Should really log this too. So if you're using Log4j:
    log.error("Error reading from URL " + myURL.toString(), e);
} finally {

    try { if (reader != null) reader.close(); }catch(Exception e){}
}

答案 1 :(得分:0)

在某处,我发现了以下评论:

  

ready()!=有更多

     

ready()不表示有更多数据要读取。它仅显示读取是否可以阻止该线程。在您阅读所有数据之前,它很可能会返回false。

     

查看是否没有更多数据检查readLine()是否返回null

听起来,reader.ready()的实现会导致我的问题。我错了这个假设吗?