Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;“转换为使用资源进行尝试”;在Netbeans中-酷豆?_Java_Netbeans - Fatal编程技术网

Java &引用;“转换为使用资源进行尝试”;在Netbeans中-酷豆?

Java &引用;“转换为使用资源进行尝试”;在Netbeans中-酷豆?,java,netbeans,Java,Netbeans,我在Netbeans 7.1.2中有以下代码: BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filename)); bos.write(newRawData); bos.close(); 一条警告建议我“转换为使用资源进行尝试”。当我选择这样做时,我的代码变成: try (BufferedOutputStream bufferedFos = new BufferedOutputStream(n

我在Netbeans 7.1.2中有以下代码:

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filename));
bos.write(newRawData);
bos.close();
一条警告建议我“转换为使用资源进行尝试”。当我选择这样做时,我的代码变成:

try (BufferedOutputStream bufferedFos = new BufferedOutputStream(new FileOutputStream(filename))) {
        bufferedFos.write(newRawData);
    }

这看起来类似于在C#中使用(…)的语法。。。他们的工作方式一样吗?使用第二种格式有什么缺点吗?我担心缺少
bos.close()try(…)
语句时指定的任何资源。可以找到更多信息。
因此,不必执行
bos.close()
,它是由Java执行的。你可以坐下来放松。
唯一的缺点是,您的代码仅适用于Java 7+。

注意 “try with resources”语句替代了
try…finally
语句。基本上,它所做的只是让您不必添加:

finally {
  if(resource != null) resource.close();
}
请在
语句的末尾尝试
。如果您使用这个,那么您的代码将只适用于Java7及更高版本

答复
try
是Java中名为
try…catch
的语句的一部分。针对您收到的警告,完整的解决方案是:

try(BufferedOutputStream bufferedFos = new BufferedOutputStream(new FileOutputStream(filename))) {
  bufferedFos.write(newRawData);
} catch(FileNotFoundException e) {
  e.printStackTrace();
}

“try with resources”块使用与
try…catch
块相同的结构,但执行后会自动关闭块内创建的任何资源。这就是为什么您没有看到一个
bufferedFos.close()语句。

try with resources块将关闭在
try(…)
块中打开的任何资源。我想看一下oracle文档以更好地理解它:对于许多资源,它使您不必添加
最后{if(resource!=null){try{resource.close();}catch(Exception e){}}}}
,这甚至更难看(特别是因为它没有在注释中格式化)轻微更正:关闭在代码块前面的括号内创建的所有资源。