RandomAccessFile类创建的流称作java随机流,RandomAccessFile类既不是InputStream类的子类,也不是OutputStream类的子类。随机流不属于IO流,支持对文件的读取和写入随机访问。当准备对一个文件进行读写操作时,创建一个指向该文件的随机流即可,这样既可以从这个流中读取文件的数据,也可以通过这个流写入数据到文件。
随机流是一种具备双向传输能力的特殊流。IO流中的各个流都只能实现单向的输入或输出操作,如果想对一个文件进行读写操作就要建立两个流。随机流 Random Access File 类创建的流既可以作为输入流,也可以作为输出流,因此建立一个随机流就可以完成读写操作。
RandomAccessFile类的定义:
public class RandomAccessFile extends Object
implements DataOutput, DataInput, Closeable
构造方法:
public RandomAccessFile(File file,String mode) throws FileNotFoundException
Random Access File 类与其他流不同,它既不是 Input Stream 类的子类,也不是 Output Stream 的子类,而是 java.lang.Object 根类的子类。RandomAccessFile最大的特点实在数据的读取处理上,因为所有的数据时按照固定的长度进行的保存,所以读取的时候就可以进行跳字节读取。
主要方法:
public int skipBytes(int n) throws IOException//向下跳
public void seek(long pos) throws IOException//向回跳
随机流的输入和输出实例:
/*
* 实现文件的保存
*/
package IODemo;
import java.io.*;
public class RandomAccessFileDemo {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File file = new File("D:"+File.separator+"mldn.txt");
RandomAccessFile raf = new RandomAccessFile(file,"rw");
String[] names = new String[] {"zhangsan","wangwu ","lisi "};//名字占8位
int age[] = new int[] {30,20,16};//年龄占4位
for(int x = 0 ; x < names.length ; x++) {
raf.write(names[x].getBytes());
raf.writeInt(age[x]);
}
raf.close();
}
}
/*
* 读取数据
*/
package IODemo;
import java.io.*;
public class RandomAccessFileDemo2 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File file = new File("D:"+File.separator+"mldn.txt");
RandomAccessFile raf = new RandomAccessFile(file,"rw");
{//读取lisi数据,跳过24位
raf.skipBytes(24);
byte[] data = new byte[8];
int len = raf.read(data);
System.out.println("姓名:"+new String(data,0,len).trim()+"年龄:"+raf.readInt());
}
{//读取wangwu数据,回跳12位
raf.seek(12);
byte[] data = new byte[8];
int len = raf.read(data);
System.out.println("姓名:"+new String(data,0,len).trim()+"年龄:"+raf.readInt());
}
{//读取zhangsan数据,回跳到顶点
raf.seek(0);
byte[] data = new byte[8];
int len = raf.read(data);
System.out.println("姓名:"+new String(data,0,len).trim()+"年龄:"+raf.readInt());
}
}
}
Random Access File 类的实例对象支持对文件的随机访问。这种随机访问文件的过程可以看作是访问文件系统中的一个大型 Byte 数组,指向数组位置的隐含指针称为文件指针。输入操作从文件指针位置开始读取字节,并随着对字节的读取移动此文件指针。输出操作从文件指针位置开始写入字节,并随着对字节的写入而移动此文件指针。因此,随机流可以用于多线程文件下载或上传,为快速完成访问提供了便利。想要掌握随机流用法的小伙伴,可以在本站的Java基础教程中继续深入学习。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习