不能使用try-with-resources或finally块

时间:2013-05-03 23:27:55

标签: java try-catch

我的代码是从网页上读取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或最终编写相同的代码?

2 个答案:

答案 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块中的流,这很难看。