在测试虚拟硬盘的时候,查了一下基本的读取文件的方法,现在将各个方法列举如下,以及测试速度的时间,供大家作为参考,以后如果用到了,可选用合适的读取方式。
1. BufferedReader,BufferedWriter
这一种方法是实验室常用的一种方式,这种方式的好处是可以读取一行,然后针对每一行进行处理,他是构造一个缓冲流,然后进行读写,但是这种方法是相对比较慢的。
参考代码如下:
BufferedReader br = new BufferedReader(new FileReader(args[0]));
BufferedWriter bw=new BufferedWriter(new FileWriter(args[1]));
String line;
while((line=br.readLine())!=null)
{
bw.write(line);
}
bw.flush();
bw.close();
br.close();
参数可以自己选用。
2. RandomAccessFile
这一种方法不常用,是随机读取的方式,这种方式比较特殊,他不隶属于InputStream,OutputStream类系,他是直接继承自Object类的。RandomAccessFile的工作方式是,把DataInputStream和DataOutputStream粘起来,再加上它自己的一些方法,比如定位用的getFilePointer( ),在文件里移动用的seek( ),以及判断文件大小的length( )。此外,它的构造函数还要一个表示以只读方式("r"),还是以读写方式("rw")打开文件的参数 (和C的fopen( )一模一样)。它不支持只写文件,从这一点上看,假如RandomAccessFile继承了DataInputStream,它也许会干得更好。
参考代码如下:
RandomAccessFile read = new RandomAccessFile(args[0],"r");
RandomAccessFile writer = new RandomAccessFile(args[1],"rw");
byte[] b = new byte[1024*1024];
int count;
while((count=read.read(b))!=-1){
//System.out.println(count);
if(count!=b.length)
{
byte[] t=new byte[count];
for(int i=0;i<count;++i)
t[i]=b[i];
writer.write(t);
}
else writer.write(b);
}
writer.close();
read.close();
参数选择可以根据后边标记读写的进行选择,比如说第二个参数是"r",说明这是一个读文件的,如果是"rw",说明是写文件的。