java - 在 InputStream#close() 上使用 finally 关键字

标签 java inputstream ioexception try-catch-finally

基本上我不太确定finally关键字的正确用法是什么,我只知道文本定义:保证代码将被执行,因为有时它不会。所以我希望我能得到一些关于这个特定代码的指示:

此外,如果调用 InputStream#close()try-catch block 是不必要的

try {
    inputStream = entity.getContent();

    BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder sb = new StringBuilder();

    String line = null;

    while((line = br.readLine()) != null) {
        sb.append(line);
        sb.append("\n");
    }

    responseText = sb.toString();
} catch(IOException e) {
    e.printStackTrace();
} finally {
    if (inputStream != null) {
        try {
            inputStream.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

最佳答案

您还可以使用try-with-resources

像这样:

try (YourResource resource) {
    //Todo...
} catch(YourSpecificException ex) {
    //Todo...
}

括号之间声明的资源将在退出构造时自动关闭。

您甚至可以一次性声明多个资源,并用分号分隔它们。实际上,这一切都在上面的链接中。

关于java - 在 InputStream#close() 上使用 finally 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21944180/

相关文章:

java - 在 Spring 中添加管理部分

java - 它是否正确 ?如何从文件加载字节?

java - 达到指定文件大小后停止 HtmlUnit 下载

java - 如何在 onClick(View v) 方法中抛出异常

sockets - 连接被对等方重置 : socket write error during ftp

java - 使用多线程在java中下载文件

Java Generics - 可比较的接口(interface)

java - 迁移到 Gradle 后无法在代码中获取版本名称

java - InputStream.available() 并从 oracle 中完整读取文件注释

java - ProtocolException:流的意外结束