文件copy 的三种方法 小结

文件copy 的三种方法 小结

package practise.javaSE.FileAndIO;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class TestFileCopy {

public static void main(String[] args) {
	
	try{
		//准备两个字符串代表源文件和目标文件
		String s1 = "C:\\Users\\Administrator\\Desktop\\实际导入处理-new.txt";
		String s2 = "D:/实际导入处理-new.txt";
		//1.构造FileInputStream类型的对象与c:/a.txt文件关联
		FileInputStream fis = new FileInputStream(s1);
		//2.构造FileOutputStream类型的对象与c:/b.txt文件关联
		FileOutputStream fos = new FileOutputStream(s2);
		
		//3.不断地读取a.txt文件中的内容写入到b.txt文件中
		System.out.println("正在玩命地拷贝...");
		
		//方式一:可以实现文件的拷贝,当拷贝的文件稍大时则效率极低
		 
		int res;
		while((res = fis.read()) != -1){
			fos.write(res);
		}
		
		/*
		 *  方式二:准备一个和文件大小一样的缓冲区,一次性将文件的所有内容
		 *         读取出来然后写入目标文件
		 *  该方式的效率明显高于方式一,但该方式的缺点在于:
		 *         当文件过大时,无法申请和文件大小一样的缓冲区,真实物理内存不足     
		 * */
		
		//通过文件输入流来获取所关联文件的大小
		int len = fis.available();
		System.out.println("源文件的大小是:" + len);
		//准备一个和文件大小一样的缓冲区
		byte[] bArr = new byte[len];
		//一次性将文件中的所有数据读取到缓冲区中
		int res = fis.read(bArr);
		System.out.println("实际读取到的数据大小是:" + res);	
		//一次性将缓冲区的所有数据写入到目标文件中
		fos.write(bArr);
		
		
		 // 方式三:准备一个合适的缓冲区进行文件的拷贝    在以后的开发中推荐该方式
		byte[] bArr = new byte[1024*8];
		int res = 0;
		//res表示实际读取的字节个数
		while((res = fis.read(bArr)) != -1){
			//表示将数组bArr中从下标为0开始的res个字节的数据写入文件
			fos.write(bArr, 0, res);
		}
		System.out.println("文件拷贝成功!");
		
		//4.关闭流对象并释放有关的资源
		fos.close();
		fis.close();
	}catch(Exception e){
		e.printStackTrace();
	}
}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值