java的IO操作之--RandomAccessFile

java

目标:

  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()完成。

以上是 java的IO操作之--RandomAccessFile 的全部内容, 来源链接: utcz.com/z/389786.html

回到顶部