三分钟玩转JAVA之读写操作
读写文件数据:RandomAccessFile,RAF是基于指针进行读写的,即RAF总是在指针指向的位置读写字节,并且读写后指针会自动向后移动。RAF即可以读取文件数据也可以向文件中写入。 r:只读模式,rw:读写模式
RandomAccessFile raf = new RandomAccessFile(“ddmooo.txt”,”rw”);
raf.write(1)//void write(int d)写出给定的int值对应2进制的低8位
raf.close();
读取文件数据:
RandomAccessFile raf = new RandomAccessFile(“ddmooo.txt”,”rw”);
int d = raf.read();//int read() 读取一个字节,并以10进制的int型返回,返回值为-1则读到文件末尾
System.out.print(d);
raf.close();
复制文件:创建一个raf读取原文件,在创建一个raf向目标文件中写出,顺序从原文件中读取每一个字节并写入到目标文件中
RandomAccessFile raf = new RandomAccessFile(“ddmooo.txt”,”r”);
RandomAccessFile rafcp = new RandomAccessFile(“ddm.txt”,”rw”);
int d=-1;
while((d=raf.read())!=-1){
rafcp.write(d);}
raf.close();
rafcp.close();
若想提高读写效率,可以通过提高每次读写的数据量来减少读写次数达到。
RandomAccessFile raf = new RandomAccessFile(“ddmooo.txt”,”r”);
RandomAccessFile rafcp = new RandomAccessFile(“ddm.txt”,”rw”);
byte[] buf =new byte[1024*10]; //byte可以用来存储字节
//int read(byte[] data) 一次性尝试读取给定的字节数组总长度的字节量并存入到该数组中,返回值为实际读取到的字节量,若返回值为-1,则表示本次没有读取到任何数据(文件末尾)
int len=-1;
while((len=raf.read(buf))!= -1){ 从0开始写到len处
rafcp.write(buf,0,len); //一次性将给定的字节数组中所有字节写出
}
raf.close(); rafcp.close();
RAF提供了方便读写基本类型数据的方法:
RandomAccessFile raf = new RandomAccessFile(“ddmoo.txt”,”rw”);
int max=Integer.MAX_VALUE;
raf.writeInt(max);// 等价于raf.write(max>>>24);raf.write(max>>>16);
raf.write(max>>>8); raf.write(max);/也有writeDouble(),readInt()等等
//调用write后,指针处于文件末尾,此时需要read,需要移动指针为开头
long a= raf.getFilePointer();//获取当前指针位置
raf.seek(0);//void seek(long a);//移动指针到指定位置
int i=raf.readInt();//返回值为实际读取的字节数,若为-1,表示文件末尾
raf.close();