RandomAccessFile :
java提供的对文件内容的访问 既可以读文件 也可以写文件
支持随机访问文件 可以访问文件的任意位置
(1)java文件模型 :
在硬盘上的文件是byte byte byte 存储的 是数据的集合
(2)打开文件
有两种模式 rw 读写 r只读
RandomAccessFile raf=new RandomeAccessFile(file,"rw");
文件指针, pointer=0;
(3)写方法
raf.write(int) ----> 只写一个字节 (后8位) 同时指针指向下一个位置 准备再次写入
(4)读方法
int b=raf.read(); 读一个字节
(5)文件读写完成后一定要关闭 (oracle官方说明)
raf.getFilePointer()获取当前指针位置
raf.length()获取文件长度
raf.seek()把指针指定到某一位置
1 import java.io.File; 2 import java.io.IOException; 3 import java.io.RandomAccessFile; 4 import java.util.Arrays; 5 6 7 8 9 public class RafDemo { 10 11 /** 12 * @param args 13 */ 14 public static void main(String[] args) throws IOException{ 15 File demo=new File("demo"); 16 if(!demo.exists()) 17 demo.mkdir(); 18 File file=new File(demo,"raf.dat"); 19 if(!file.exists()) 20 { 21 file.createNewFile(); 22 } 23 24 RandomAccessFile raf=new RandomAccessFile(file, "rw"); 25 //指针的位置 26 System.out.println(raf.getFilePointer()); 27 28 raf.write(‘A‘);//只写了一个字节 29 System.out.println(raf.getFilePointer()); 30 raf.write(‘B‘); 31 32 int i=0x7fffffff; 33 //用write每次只能写一个字节,要写4次 34 //0xff=00000000 00000000 00000000 11111111 35 //和 byte(8bit)与上后其实是给int(4byte)的前24位补0,取得是后8位。 36 raf.write(i>>>24);//高8位 37 raf.write(i>>>16); 38 raf.write(i>>>8); 39 raf.write(i); 40 System.out.println(raf.getFilePointer()); 41 42 //可以直接写入一个int 43 raf.writeInt(i); 44 System.out.println(raf.getFilePointer()); 45 46 String s="中"; 47 byte[] gbk=s.getBytes("gbk"); 48 raf.write(gbk); 49 System.out.println(raf.getFilePointer()); 50 51 //读文件,把指针移动头部 52 raf.seek(0); 53 //一次性读取,把文件中的内容都读到字节数组中 54 byte[] buf=new byte[(int) raf.length()]; 55 raf.read(buf); 56 System.out.println(Arrays.toString(buf)); 57 58 String s1=new String(buf,"gbk"); 59 // System.out.println(s1); 60 for (byte b : buf) { 61 System.out.print(Integer.toHexString(b& 0xff)+" "); 62 } 63 raf.close(); 64 } 65 66 }
时间: 2024-10-14 02:44:09