随机读写文件RandomAccessFile

RandomAccessFile类用于随机访问文件,自身具备读和写的方法,通过skipBytes(int x),seek(int x)方法来达到随机访问的目的。

RandomAccessFile类的实例支持对随机访问文件的读取和写入。

随机访问文件的行为类似于存储在文件系统中的一个大型byte数组。存在指向隐函数组的光标或索引,称为文件指针。

该类不算是IO体系中的子类,因为该类直接继承自Object类,但是它是IO包中的成员,因为它具备读和写的功能。在内部封装了一个数组,而且通过指针对数组的元素进行操作。可以通过getFilePointer获取指针位置,同时可以通过seek方法来改变指针的位置。

其实完成读写的原理就是内部封装了字节输入流和输出流。

通过RandomAccessFile的构造函数我们可以看出:该类只能操作文件而且操作文件还有模式。

RandomAccessFile对象的构造函数要操作的文件不存在会自动创建文件,如果存在则不会覆盖已有的文件。如果模式为只读r,则不会创建文件,而是会去读取一个已经存在的文件,如果该文件存在,则会出现异常;如果模式为rw,操作的文件不存在,则会自动创建文件,如果存在,则不会覆盖该文件。

RandomAccessFile的实际应用:将文件分段写入,一个线程对应一段,是文件多线程下载的原理

示例:

public void writeFile() throws IOException{
    RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
    raf.write("李四".getBytes());
    raf.writeInt(255);
    raf.close();
}
public void readFile() throws IOException{
    RandomAccessFile raf = new RandomAccessFile("raf.txt","r");
    byte[] buf = new byte[4];
    raf.read(buf);
    int num = raf.readInt();
    raf.close();
}
public void writeFile2() throws IOException{
    RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
    raf.seek(8*3);//调整对象中的指针
    raf.skipBytes(8);//跳过指定的字节数,但是不能往回跳
    raf.write("zhangsan".getBytes());
    raf.writeInt(90);
    raf.close();
}
时间: 2024-10-26 09:15:33

随机读写文件RandomAccessFile的相关文章

JAVA学习笔记(三十五)- 随机读写文件 RandomAccessFile

RandomAccessFile类 /* * RandomAccessFile类,随机读写文件 * * 数据分段要有规律,每段大小相等,可以将每段数据设置为较大的值,足以存在每一个段的数据 * */ public class Test04 { public static void main(String[] args) throws IOException { //writeFile(); readFile(); } // 写入数据 public static void writeFile()

随机访问文件RandomAccessFile 与 内存映射文件MappedByteBuffer

一.RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. RandomAccessFile不属于InputStream和OutputStream类系的.实际上,除了实现DataInput和DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系

随机读写的RandomAccessFile

RandomAccessFile类是一个可以进行随机读写的java类,可以动态的移动指针进行随机写 构造函数信息: 主要方法: 如果在seek方法设置的位置的上进行写内容会覆盖当年位置上的内容 package cn.bean.demo.random; import java.io.IOException; import java.io.RandomAccessFile; public class RandomAccessFileTest { public static void main(Str

Java的IO流之文件随机读写

Java.io 包提供了 RandomAccessFile 类用于随机文件的创建和访问.使用这个类,可以跳转到文件的任意位置读写数据.程序可以在随机文件中插入数据,而不会破坏该文件的其他数据.此外,程序也可以更新或删除先前存储的数据,而不用重写整个文件. RandomAccessFile 类的两个构造方法: mode 表示所创建的随机读写文件的操作状态: r:表示以只读方式打开文件. rw:表示以读写方式打开文件,使用该模式只用一个对象即可同时实现读写操作 下面我们来模拟下系统日志,将数据写入到

Java知多少(72)文件的随机读写

Java.io 包提供了 RandomAccessFile 类用于随机文件的创建和访问.使用这个类,可以跳转到文件的任意位置读写数据.程序可以在随机文件中插入数据,而不会破坏该文件的其他数据.此外,程序也可以更新或删除先前存储的数据,而不用重写整个文件. RandomAccessFile类是Object类的直接子类,包含两个主要的构造方法用来创 建RandomAccessFile 的对象,如表 10-11 所示. 表 10-11 RandomAccessFile 类的构造方法 构造方法 功能描述

Java 核心编程——文件随机读写类(RandomAccessFile)

1.RandomAccessFile RandomAccessFile主要用于文件内容的读写访问 2.访问模式 "r":只读方式. "rw":打开以便读取和访问,如果文件不存在则创建文件. "rws": 除了'rw'功能以外,文件内容或者元数据更新时一同写入. "rwd":除了'rw'功能以外,文件内容更新时一同写入. 3.使用案例 package test; import java.io.File; import java.

【幻化万千戏红尘】qianfengDay20-java基础学习:数据流、随机读取文件流RandomAccessFile

课程回顾: 流:转换流:字符和字节的转换对象流(Object):序列化,反序列化 打印流(Print):打印各种数据类型的数据 今日内容:数据流(Data):支持将基本数据类型写出,字节流,处理流1.DataOutputStream:数据输出字节流常用方法:writeXXX:写出基本数据类型的数据writeUTF:写出字符串2.DataInputStream:数据输入字节流常用方法:readXXX:读取基本数据类型的数据readUTF:读取字符串 随机读取文件类:拥有写出和读取基本数据类型的方法

C 文件随机读写

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void eatline(){ 5 while(getchar()!='\n') 6 continue; 7 } 8 //文件随机读写 9 int main(int argc, char * argv[]) 10 { 11 FILE *fp; 12 int offset,tel; 13 long in_stream; 14 char ch,get; 15 long pos; 16 if((

用RandomAccessFile来读写文件

RandomAccessFile类,即可以读取文件,也可以写入文件,功能比较强大,这种读取/写入通过一个参数控制. 通过RandomAccessFile类的方法,可以设置和测定文件指针的位置,因此可以在文件的各种位置读取或写入文件. 案例如下: 读取file81.txt中的内容,并把它写入到fie82.txt中.注意,在file82.txt中只能添加新内容,不能覆盖原有的内容. package cn.unit12.file; import java.io.RandomAccessFile; pu