复制文件
配合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();
}
}