1.JAVA文件模型
在硬盘中的文件是byte存储的,是数据的集合。
2.打开文件
有两种方式:“rw”(读写),“r”(只读);
RandomAccessFile raf = new RandomAccessFile(file,“rw”);
文件指针,打开文件时文件指针pointer = 0;
3.写方法
raf.write()--每次写,只能写一个字节(后8位),pointer加1,指向下个位置,准备再次写入
4.读方法
int b = raf.read()--和写一样一次读一个字节
5.关闭
读写完成后一定要关闭raf.close(),不然会出现不可预料的错误
示例代码:
import java.awt.Point;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.RandomAccess;
public class RandomAccessFileSy {
/**
* @param args
*/
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
File demo = new File("demo");
if(!demo.exists()){
demo.mkdir();
}
File file = new File(demo,"raf.dat");
if(!file.exists()){
file.createNewFile();
}
RandomAccessFile raf = new RandomAccessFile(file, "rw");
//指针的位置
System.out.println(raf.getFilePointer());
//注意每次只能写一个字节
raf.write('A');
System.out.println(raf.getFilePointer());
raf.write('b');
int i = 0x7fffffff;//最大整数,四个字节
raf.write(i>>>24);
raf.write(i>>>26);//四次写入
raf.write(i>>>8);
raf.write(i);
raf.writeInt(i);//或者直接调用该方法,其实现如上所示
String s = "余";
byte[] bytes = s.getBytes("gbk");
raf.write(bytes);
System.out.println(raf.getFilePointer());
//读的时候指针要指向开头
raf.seek(0);
//一次性读取
byte[] dbyte = new byte[(int)raf.length()];
raf.read(dbyte);
System.out.println(Arrays.toString(dbyte));
for (byte b : dbyte) {
System.out.print(Integer.toHexString(b&0xff)+" ");
}
raf.close();
}
}