2016-05-19 38 views
2

我有OutputStream列表来处理,我知道,当我只需要一个,我可以确保它是使用try-with-resources模式关闭,如:如何关闭Java中的OutputStream列表?

try(OutputStream os = new ByteArrayOutputStream()) { 
    do something... 
} catch (IOException e) { 
    do something... 
} 

但是如果有它们的列表?我可以在try后面的圆括号中加上列表(ArrayList或正常数组)吗?

+0

在try-with-resource语句中没有对'List'的明确支持。如果你真的想使用'try(...){...}'语法,你将不得不推出你自己的'AutoCloseable'来包装一个'AutoCloseables'列表。像[this](http://pastebin.com/8MtLFLu2)这样的东西可以工作。 – aioobe

回答

2

您可以使用foreach(或标准for)来实现此目的。

OutputStream[] streams = {...}; 

for (OutputStream stream : streams) { 
    try (OutputStream os = stream) {} 
    catch (IOException e) {} 
} 

你不能“把ArrayList或正常阵列中的括号后try,因为它只能与实现接口java.lang.AutoCloseable对象。

+0

根据用例情况,当关闭失败时可能会进行攻击 –

相关问题