Java 关闭 IOStream 最后给出错误 : Unhandled Exception: java. io.IOException

标签 java exception

来自 C#,我通常在与流交互时使用此模式(请注意,我在这里使用 Java 类,但我指的是 C# 中的模式):

HttpURLConnection ServiceConnection;
DataOutputStream ConnectionStream;

try {
    ServiceConnection = (HttpURLConnection) ServiceUrl.openConnection();
    ConnectionStream = new DataOutputStream(ServiceConnection.getOutputStream());

    //...
}
finally {
    ConnectionStream.close();
    ServiceConnection.Disconnect();
}

根据我的理解,对于像 IOException 这样的检查异常,我需要包含一个 catch block 。很公平。所以我改变了我的代码如下:

HttpURLConnection ServiceConnection;
DataOutputStream ConnectionStream;

try {
    ServiceConnection = (HttpURLConnection) ServiceUrl.openConnection();
    ConnectionStream = new DataOutputStream(ServiceConnection.getOutputStream());

    //...
}
catch (MalformedURLException e1) {
    //...
}
catch (IOException e) {
    //...
}
finally {
    ConnectionStream.close();
    ServiceConnection.Disconnect();
}

但是,这段代码给了我以下错误:在我尝试关闭finally block 中的流的行上出现未处理的异常:java.io.IOException。

我在这里不明白什么?我认为finally block 是你应该放置清理代码的地方,并且我认为在这里关闭流是完美的选择?

最佳答案

您可以使用 apache 的 IOUtils图书馆。它有一个名为 close 的方法,静静地。

finally {
        IOUtils.closeQuietly(connectionStream);
    }

否则你必须用 try/catch 包围 close 方法

finally {
        if (connectionStream != null) {
            try {
                connectionStream.close();
            } catch (Exception ignore) {
                // Nothing to do
            }
        }
    }

关于Java 关闭 IOStream 最后给出错误 : Unhandled Exception: java. io.IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27173966/

相关文章:

Java Swing Mac OSX 首选项菜单

phpunit 测试 expectedException 不工作

JAVA - JTable & Model 的奇怪问题(可能是线程问题)

c++ - 通过在构造函数主体之前抛出异常来防止构造

java - 显示图像 - 错误 : incompatible types: ParseObject cannot be converted to ParseFile

java - Java中循环CSV的每一行并删除最多第N个逗号

java - 如何通过castor生成的对象在XML中按属性值查找元素

java - eclipse 和短路评估

c++ - 如何遍历 boost::exception 中的所有 error_info?

java - CopyOnWriteArrayList 抛出 CurrentModificationException