您的位置:首页 > 编程语言 > Java开发

java的IO操作之--RandomAccessFile

2016-08-07 20:49 579 查看

目标:

  1)掌握RandomAccessFile类的作用。

  2)用RandomAccessFile读取指定位置的数据。

具体内容

  RandomAccessFile类的主要功能是完成随机读取功能,可以读取指定范围的内容。

  假设文件中存储了以下三个数据:



  因为文件中所有内容都是按照字节存储的,都有固定的保存位置。



  构造方法:

public RandomAccessFile(File file,String mode) throws FileNotFoundException


  实例化此类需要传递File类,告诉程序应该操作哪个文件。之后有一个模式,文件的打开模式,

  常用的两种模式:

  1) r:读模式

  2)w:写模式

  3)rw:读写模式,如果使用此模式,如果文件不存在,则会自动创建

package Thread1;
import java.io.File ;
import java.io.RandomAccessFile ;
public class demo1{
// 所有的异常直接抛出,程序中不再进行处理
public static void main(String args[]) throws Exception{    //在主方法处使用throws抛出异常给JVM处理,
节省了很多异常处理操作
File f = new File("d:" + File.separator + "test.txt") ;    // 指定要操作的文件
RandomAccessFile rdf = null ;        // 声明RandomAccessFile类的对象
 rdf = new RandomAccessFile(f,"rw") ;// 读写模式,如果文件不存在,会自动创建
String name = null ;
int age = 0 ;
name = "zhangsan" ;            // 字符串长度为8
age = 30 ;                    // 数字的长度为4
 rdf.writeBytes(name) ;        // 将姓名写入文件之中
rdf.writeInt(age) ;            // 将年龄写入文件之中
name = "lisi    " ;            // 字符串长度为8
age = 31 ;                    // 数字的长度为4
 rdf.writeBytes(name) ;        // 将姓名写入文件之中
rdf.writeInt(age) ;            // 将年龄写入文件之中
name = "wangwu  " ;            // 字符串长度为8
age = 32 ;                    // 数字的长度为4
 rdf.writeBytes(name) ;        // 将姓名写入文件之中
rdf.writeInt(age) ;            // 将年龄写入文件之中
rdf.close() ;                // 关闭
}
};


  写入的方法:writeBytes(String str);writeInt(int a);

  运行结果:



  以上完成了写入的操作。每条数据都是12位。

  写完开始读取数据。写的时候,可以将一个字符串写入(writeBytes(String str)),读的时候, 需要一个个以字节读取出来(readByte())。

  跳过几个字节的方法:skipBytes(n),向前几个字节的方法:seek(0),数组与字符串转换的方法:String str=new String(char b[])。

import java.io.File ;
import java.io.RandomAccessFile ;
public class RandomAccessFileDemo02{
// 所有的异常直接抛出,程序中不再进行处理
public static void main(String args[]) throws Exception{
File f = new File("d:" + File.separator + "test.txt") ;    // 指定要操作的文件
RandomAccessFile rdf = null ;        // 声明RandomAccessFile类的对象
rdf = new RandomAccessFile(f,"r") ;// 以只读的方式打开文件
String name = null ;
int age = 0 ;
byte b[] = new byte[8] ;    // 开辟byte数组
// 读取第二个人的信息,意味着要空出第一个人的信息
 rdf.skipBytes(12) ;        // 跳过第一个人的信息
for(int i=0;i<b.length;i++){
b[i] = rdf.readByte() ;    // 读取一个字节
}
name = new String(b) ;    // 将读取出来的byte数组变为字符串,这里把数组放到string对象中变成String字符串。
age = rdf.readInt() ;    // 读取数字    //readInt()读取的大小恰好是4个字节,读取前面8个字符串后面的几个数字。
System.out.println("第二个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
// 读取第一个人的信息
rdf.seek(0) ;    // 指针回到文件的开头
for(int i=0;i<b.length;i++){
b[i] = rdf.readByte() ;    // 读取一个字节
}
name = new String(b) ;    // 将读取出来的byte数组变为字符串
age = rdf.readInt() ;    // 读取数字
System.out.println("第一个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
rdf.skipBytes(12) ;    // 空出第二个人的信息
for(int i=0;i<b.length;i++){
b[i] = rdf.readByte() ;    // 读取一个字节
}
name = new String(b) ;    // 将读取出来的byte数组变为字符串
age = rdf.readInt() ;    // 读取数字
System.out.println("第三个人的信息 --> 姓名:" + name + ";年龄:" + age) ;
rdf.close() ;                // 关闭
}
};


  运行结果:

第二个人的信息 --> 姓名:lisi    ;年龄:31
第一个人的信息 --> 姓名:zhangsan;年龄:30
第三个人的信息 --> 姓名:wangwu  ;年龄:32


  如果要完成文件内容操作,可以使用RoundomAccessFile()完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: