2016-05-19 57 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

根據用例情況,當關閉失敗時可能會進行攻擊 –