public static void main(String[] args) { FileInputStream fis = null; try { fis = new FileInputStream("a.txt"); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { // 关闭磁盘文件,回收资源 if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } }Java 7 以前,上面程序中的 finally 代码块是不得不写的“臃肿代码”,为了解决这种问题,Java 7 增加了一个新特性,该特性提供了另外一种管理资源的方式,这种方式能自动关闭文件,被称为自动资源管理(Automatic Resource Management)。该特性是在 try 语句上的扩展,主要释放不再需要的文件或其他资源。
try (声明或初始化资源语句) { // 可能会生成异常语句 } catch(Throwable e1){ // 处理异常e1 } catch(Throwable e2){ // 处理异常e1 } catch(Throwable eN){ // 处理异常eN }当 try 代码块结束时,自动释放资源。不再需要显式的调用 close() 方法,该形式也称为“带资源的 try 语句”。
;
隔开即可。public class AutoCloseTest { public static void main(String[] args) throws IOException { try ( // 声明、初始化两个可关闭的资源 // try语句会自动关闭这两个资源 BufferedReader br = new BufferedReader(new FileReader("AutoCloseTest.java")); PrintStream ps = new PrintStream(new FileOutputStream("a.txt"))) { // 使用两个资源 System.out.println(br.readLine()); ps.println("C语言中文网"); } } }上面程序中粗体字代码分别声明、初始化了两个 IO 流,BufferedReader 和 PrintStream 都实现了 Closeable 接口,并在 try 语句中进行了声明和初始化,所以 try 语句会自动关闭它们。
public class AutoCloseTest { public static void main(String[] args) throws IOException { // 有final修饰的资源 final BufferedReader br = new BufferedReader(new FileReader("AutoCloseTest.java")); // 没有显式使用final修饰,但只要不对该变量重新赋值,该变量就是有效的 final PrintStream ps = new PrintStream(new FileOutputStream("a. txt")); // 只要将两个资源放在try后的圆括号内即可 try (br; ps) { // 使用两个资源 System.out.println(br.readLine()); ps.println("C语言中文网"); } } }
本文链接:http://task.lmcjl.com/news/10722.html