0

所以我有创建ZipInputStream所需的这个FileInputStream ,我想知道如果FileInputStream关​​闭, ZipInputStream会发生什么。考虑以下代码:

public void Foo(File zip) throws ZipException{
     ZipInputStream zis;
     FileInputStream fis = new FileInputStream(zip);

     try{
         zis = new ZipInputStream(fis);
     } catch (FileNotFoundException ex) {
         throw new ZipException("Error opening ZIP file for reading", ex);
     } finally {
         if(fis != null){ fis.close(); 
     }
}

zis remais开门吗?ZipInputStream 对象会发生什么?有没有办法可以测试这个?

4

2 回答 2

3

如果您使用的是 java 7,最佳实践是使用“try with resources”块。所以资源将被自动关闭。

考虑以下示例:

static String readFirstLineFromFile(String path) throws IOException {
    try (BufferedReader br =
               new BufferedReader(new FileReader(path))) {
        return br.readLine();
    }
}
于 2017-04-19T09:04:25.290 回答
1

这应该是使用try with resourcejava 7 中可用的块的正确方法。

这样,资源(fis 和 zis)将在 try 块结束时自动关闭。

try (FileInputStream fis = new FileInputStream(zip);  
     ZipInputStream zis = new ZipInputStream(fis)) 
{
   // Do your job here ...
} catch (FileNotFoundException ex) {
   throw new ZipException("Error opening ZIP file for reading", ex);
} 

try-with-resources 声明

try-with-resources 语句是声明一个或多个资源的 try 语句。资源是程序完成后必须关闭的对象。try-with-resources 语句确保每个资源在语句结束时关闭。

于 2017-04-19T09:03:48.540 回答