在JDK 7中,引入了try-with-resource
用于替代在try-catch-finally
中手动的资源关闭
通常需要我们手动释放的资源包括:
- 文件/流资源
- socket资源
- 数据库连接资源
这些资源不能自动的被回收,长时间无效占用,当超过最大限制后,将会无资源可用,最终导致系统无法正常运行
以文件拷贝为例演示JDK 7之前和引入try-with-resource
后的差异
- 使用
try-catch-finally
实现文件拷贝的资源管理
输入输出流需要在try块外先定义,并在finally中按初始化顺序的倒序逐一进行释放
@Test
public void copyFile() {
//路径
String originalUrl = "lib/FileCopy.java";
String outUrl = "outTest/out.txt";
//资源对象
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
try {
//初始化资源对象
fileInputStream = new FileInputStream(originalUrl);
fileOutputStream = new FileOutputStream(outUrl);
int content;
//读取并写入
while ((content = fileInputStream.read()) != -1) {
fileOutputStream.write(content);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//资源关闭