我的代码是从网页上读取HTML页面,我想编写好的代码,所以我想使用try-with-resources关闭资源或者最后阻止。
使用以下代码,似乎不可能使用它们中的任何一个来关闭“in”。
try {
URL url = new URL("myurl");
BufferedReader in = new BufferedReader(
new InputStreamReader(
url.openStream()));
String line = "";
while((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
}
catch (IOException e) {
throw new RuntimeException(e);
}
您是否可以使用try-with-resources或最终编写相同的代码?
答案 0 :(得分:3)
我认为以下内容没有任何特别的困难:
try (BufferedReader in = new BufferedReader(new InputStreamReader(
new URL("myurl").openStream()))) {
String line = "";
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
这不是你想要的吗?
答案 1 :(得分:1)
BufferedReader in = null;
try {
URL url = new URL("myurl");
in = new BufferedReader(
new InputStreamReader(
url.openStream()));
String line = "";
while((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
throw new RuntimeException();
} finally {
try {
in.close();
} catch (Exception ex) {
// This exception is probably safe to ignore,
// we are just making a best effort to close the stream.
}
}
在finally块中使用close的想法是,如果在io.close()
块中的try
之前发出一些异常,则流仍将被关闭。有时,不了解finally
的人会关闭每个catch
块中的流,这很难看。