Java SE 7中新增了try-with-resources
语句。try-with-resources
语句是一个声明了一个或多个资源的try
语句。这里的一个资源指的是在使用完成后必须关闭释放的对象。try-with-resources
语句可以确保在该语句执行之后关闭每个资源。所有实现了java.lang.AutoCloseable接口的对象均可以作为资源在try-with-resources
语句中使用(java.io.Closeable是其子接口,因此也支持)。
在Java SE 7之前,为了确保资源被关闭,你可能会编写如下代码:
static String readFirstLineFromFileWithFinallyBlock(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { if (br != null) br.close(); } }
不过,在Java SE 7中,你可以用下面的代码来替换上面的代码了:
static String readFirstLineFromFile(String path) throws IOException { try (BufferedReader br = new BufferedReader(new FileReader(path))) { return br.readLine(); } }
你也可以同时声明多个资源:
public static void writeToFileZipFileContents(String zipFileName, String outputFileName) throws java.io.IOException { java.nio.charset.Charset charset = java.nio.charset.Charset.forName("US-ASCII"); java.nio.file.Path outputFilePath = java.nio.file.Paths.get(outputFileName); try ( //声明两个资源 java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName); java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset) ) { //这里是自行编写的代码 } }
值得注意的是:在上面的try-with-resources
语句执行完毕后,系统先关闭释放writer
,再关闭释放zf
。也就是说,try-with-resources语句中资源的关闭释放顺序和它们创建的顺序相反。
原文出处:http://www.365mini.com/page/11.htm