资源关闭

举报
zwy 发表于 2020/07/27 22:10:34 2020/07/27
【摘要】 /** * * 垃圾回收(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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。