我正在使用以下代码阅读网址:
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背景太少,无法确定......
答案 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()的实现会导致我的问题。我错了这个假设吗?