阅读131 返回首页    go 微软 go Office


RandomAccessFile类实现随机读写文件

 java.io.RandomAccessFile类能够实现对文件内的随机位置进行读写操作。通过下面的一个实例来进行了解。
实例:
public class RandomAccessFileDemo03 {
public static void main(String[] args) throws IOException{
File f1=new File("e:"+File.separator+"ioString.dat");
RandomAccessFile raf=new RandomAccessFile(f1,"rw");//没有则创建
String name=null;//姓名
int age=0;//年龄
String phoneNumber=null;//电话号码
//每个人的信息用26个字节来储存
name="tangtianyun";//姓名占11个字节,不足11字节用空格补足
age=22;//int型的年龄占4个字节
phoneNumber="05718839476";//电话号码占11字节,不足11字节用空格补足
raf.writeBytes(name);
raf.writeInt(age);
raf.writeBytes(phoneNumber);
name="heyili     ";
age=23;
phoneNumber="13527971631";
raf.writeBytes(name);
raf.writeInt(age);
//raf.writeBytes(phoneNumber);//这种方式比较简便,下面的方式会复杂些。
byte[] b=phoneNumber.getBytes();//通过字符串返回byte数组
for(int i=0;i<b.length;i++){
raf.writeByte(b[i]);
}
raf.close();//写入操作完成。文件必须关闭。
//下面进行读取操作
File f2=new File("e:"+File.separator+"ioString.dat");
RandomAccessFile raf2=new RandomAccessFile(f2,"r");//r表示模式为读
String readName=null;
int readAge=0;
String readPhoneNumber=null;
//假设先读取第2个人的信息
raf2.skipBytes(1*26);//跳过26个字节,即跳过第1个人的信息
byte[] bName=new byte[11];
for(int i=0;i<11;i++){
//每次读取1个字节,循环11次将储存的名字信息放入byte数组
bName[i]=raf2.readByte();
}
readName=new String(bName);//将byte数组新构造一个String字符串
readAge=raf2.readInt();//每次读取4个字节的int数据
byte[] bPhoneNumber=new byte[11];
for(int i=0;i<11;i++){
bPhoneNumber[i]=raf2.readByte();
}
readPhoneNumber=new String(bPhoneNumber);
System.out.println("姓名:"+readName+",年龄:"+readAge+",电话号码:"+readPhoneNumber);
//假设再读取第1个人的信息
raf2.seek(0);//文件指针回到第1个字节前
bName=new byte[11];
for(int i=0;i<11;i++){
bName[i]=raf2.readByte();
}
readName=new String(bName);
readAge=raf2.readInt();
bPhoneNumber=new byte[11];
for(int i=0;i<11;i++){
bPhoneNumber[i]=raf2.readByte();
}
readPhoneNumber=new String(bPhoneNumber);
System.out.println("姓名:"+readName+",年龄:"+readAge+",电话号码:"+readPhoneNumber);
raf2.close();
}
}
使用RandomAccessFile进行文件的随机读写操作,必须要规划好每个内容储存所需要的字节数,因此比较麻烦。也正是因为这样的原因,才是它拥有了随机读写的特性。这说明付出总有回报

最后更新:2017-04-02 06:52:14

  上一篇:go 马士兵 正则表达式的学习(上)
  下一篇:go java.lang.Integer.toHexString(b[n] &amp; 0XFF)中0XFF使用