日期:2014-05-20  浏览次数:20787 次

有时候他会卡住在line = reader.readLine()) != null
我使用下面这个方法下载网页,很多时候它都能够成功下载网页,但有时候他会卡住在line = reader.readLine()) != null这个地方,就是读不出来下面的内容。重新启动程序,这个卡住程序的网页却能够轻易读取,可见这是程序设计上的问题。请问如何克服这个问题,能不能让程序尝试读取一段时间后,如果还是读不出来,就停止读取这个网页,继续读取下一个网页内容?


// 根据一个网址提取这个网址的网页内容
public String getHTMLResource(String htmlFile) throws IOException {//读取URL指定的网页内容
StringBuilder Content =new StringBuilder();
try {
String line = null;
URL url = new URL(htmlFile);// 根据网址创建URL对象
URLConnection conn = url.openConnection();
  BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line = reader.readLine()) != null) {//读取文件信息
// 记住在这里,文件的末尾多加了一个换行符,这里不清除他了。
Content.append(line+"\n");
}
reader.close();
} catch (Exception e) {}
return Content.toString();
}

------解决方案--------------------
卡住了,跟程序设计没啥太大关系,是网络卡住了。

如果想要支持Timeout的话,应该要用java.nio.*

不过对于处理HTML的,建议你用HTTPClient好了,这些问题都帮你搞定了的。
------解决方案--------------------
readLine是阻塞方法,能卡住的原因,基本是因为inputstream没有结束,还在等待输入;
你上网的时候是不是也遇到过,某个网页半天打不开,刷新下,马上就出来了;

PS:你该结贴了
------解决方案--------------------
设置超时时间