笔记(十):RandomAccessFile类(二):文件的复制

RandomAccessFile类(二)

复制文件

配合write()和read(),将指定的文件复制到新的位置。
其实质就是不断的重复读出、写入俩个操作,下面是实现的代码:

package com.tedu.raf;

import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * 使用RandomAccessFile实现文件的复制
 * @author Wildmess
 *
 */
public class CopyDemo {
	public static void main(String[] args) throws IOException {
		//负责读数据的RAF
		RandomAccessFile rafRead = new RandomAccessFile("./raf.txt","r");
		//负责写入的RAF
		RandomAccessFile rafWrite = new RandomAccessFile("./raf_copy..txt","rw");
		
		//声明一个字节,只用低八位
		int d;
		//记录开始的时间
		long start = System.currentTimeMillis();
		while((d = rafRead.read()) != -1) {
			rafWrite.write(d);
		}
		//记录结束的时间
		long end = System.currentTimeMillis();
		System.out.println("用时" +  (end-start) + "ms");
		//关闭
		rafRead.close();
		rafWrite.close();
	}
}

复制文件优化

运行上述程序,你会发现当要复制的文件较大时,需要的时间会非常非常的多
于是我们需要进行优化
这里我们定义一个数组,将给定的字节数组中的所有自己一次性写出,提高运行效率

package com.tedu.raf;

import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * 优化文件复制
 * 创建缓存,减少读写数据的次数
 * 提高每次读写的数据量减少实际读写的次数可以提高读写效率
 * 
 * 单字节读写式一种随机读写形式
 * 一组字节读写式块读写形式
 * @author Wildmess
 *
 */
public class CopyDemo2 {
	public static void main(String[] args) throws IOException {
		RandomAccessFile rafRead = new RandomAccessFile("./raf.txt","r");
		RandomAccessFile rafWrite = new RandomAccessFile("./raf_copy.txt","rw");
	
		/*
		 * int read(byte[] data)
		 * 写一个方法,一次性读取给定字节数组长度的字节量,并存到该数组中
		 * 返回实际读取到的字节量
		 * 如果返回-1表示本次读取已经到末尾(没有读取到数据)
		 * 
		 * void write(byte[] data)
		 * 将给定的字节数组中的数据写入到文件中
		 * 
		 * void write(byte data,int offset,int len)
		 * 将给定的字节数组中的数据,从下表为offset的位置开始
		 * 一次性写入len个长度
		 * 
		 */
		
		//定义缓存
		byte[] data = new byte[1024*10];
		int len;//每次读取到的数据,大了占内存,小了速度慢
		
		long start = System.currentTimeMillis();
		while((len = rafRead.read(data)) != -1) {
			rafWrite.write(data);
		}
		long end = System.currentTimeMillis();
		
		System.out.println("用时" + (end-start) + "ms");
		
		rafRead.close();
		rafWrite.close();
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值