资源关闭
【摘要】 /** * * 垃圾回收(GC)的特点 * * 垃圾回收机制只负责回收堆内存资源,不会回收任何物理资源 程序无法精确控制垃圾回收动作的具体发生时间 在垃圾回收之前,总会先调用它的finalize方法 */ /** * 常见需手动释放的物理资源 * 文件/流资源 * 套接字资源 * 数据库连接资源 ...
/**
*
* 垃圾回收(GC)的特点
*
* 垃圾回收机制只负责回收堆内存资源,不会回收任何物理资源
程序无法精确控制垃圾回收动作的具体发生时间
在垃圾回收之前,总会先调用它的finalize方法
*/
/**
* 常见需手动释放的物理资源
* 文件/流资源
* 套接字资源
* 数据库连接资源
*
*
*/
/**
* 物理资源可以不手动释放吗
*
*
* 资源被长时间无效占用
* 超过最大限制后,将无资源可用
导致系统无法正常运行
*
*
*
*/
/**
* 实战案例:文件拷贝(初始版)
*
* 目的:Java7之前,实现利用基础IO流实现文件拷贝功能
* /
/**
* JDK7之前的文件拷贝功能
* @author Allen17805272076
*
*/
public class FileCopyTest {
public void copyFile(){
/**
* 1、创建输入/输出流
* 2、执行文件拷贝,读取文件内容,写入到另一个文件中
* 3、关闭流资源
*
*
*/
//定义输入路径和输出路径
String originalUrl="";
String targetUrl="";
//声明文件输入流,文件输出流
FileInputStream originalFileInputStream=null;
FileOutputStream targetUrlFileOutputStream=null;
try {
//实例化文件流对象
originalFileInputStream=new FileInputStream(originalUrl);
targetUrlFileOutputStream=new FileOutputStream(targetUrl);
//读取的字节信息
int content;
//迭代,读取/写入字节
try {
while((content=originalFileInputStream.read())!=-1) {
targetUrlFileOutputStream.write(content);;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(targetUrlFileOutputStream!=null) {
try {
targetUrlFileOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(originalFileInputStream!=null) {
try {
originalFileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
package com.zkr.resource;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**基于JDK7之后,实现正确关闭流资源
*
* @author Allen17805272076
*
*try-with-resource 语法糖
*
*/
public class NewFileCopyTest {
public void copyFile() {
//定义输入路径和输出路径
String originalUrl="";
String targetUrl="";
//声明文件输入流,文件输出流
try(FileInputStream originalFileInputStream=new FileInputStream(originalUrl);
FileOutputStream targetFileOutPutStream=new FileOutputStream(targetUrl);){
int content;
//迭代,拷贝资源
while((content=originalFileInputStream.read())!=-1) {
targetFileOutPutStream.write(content);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
try-with-resource简介
1、Java7引入新特性
2、优雅关闭资源
3、一种语法糖
实战案例:
实战:查看编译后源码,分析内部原理
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)