java输入输出流14_RandomAccessFile类

1.RandomAccessFile类概述

在这里插入图片描述
这个是JDK上的截图,我们可以看到它的父类是Object,没有继承字节流、字符流家族中任何一个类,不属于IO流。RandomAccessFile类的主要功能是完成随机读取功能,可以读取指定位置的内容。

之前的File类只是针对文件本身进行操作的,而如果要想对文件内容进行操作,则可以使用RandomAccessFile类,此类属于随机读取类,可以随机读取一个文件中指定位置的数据。

随机访问文件原理,首先把随机访问的文件对象看作存储在文件系统中的一个大型 byte数组,然后通过指向该byte数组的光标或索引(即:文件指针 filePointer)在该数组任意位置读取或写入任意数据。

例如,现在假设文件中保存类以下三个数据:zhangsan, 30、 lisi, 31、wangwu, 32
在这里插入图片描述
文件中,所有内容都是按照字节存放的,都有固定的保存位置。

2.RandomAccessFile类方法

  • 构造方法

接收File类的对象来指定操作路径,mode参数用于设置访问模式:“r”只读,“rw”读写

public RandomAccessFile(String name, String mode);

接收字符串来指定操作路径,mode参数用于设置访问模式:“r”只读,“rw”读写

public RandomAccessFile(File file, String mode);

  • 存取数据案例

【示例】存取数据案例

public class RandomAccessFileDemo {
	// 读取数据
	public static void read() throws IOException {
		RandomAccessFile acf = new RandomAccessFile("info.txt", "r");
		// 读取一组数据
		byte[] by1 = new byte[8];
		acf.read(by1);
		int age1 = acf.readInt();
		// 输出:name:zhangsan age:28
		System.out.println("name:" + new String(by1) + " age:" + age1);
		// 读取一组数据
		byte[] by2 = new byte[8];
		acf.read(by2);
		int age2 = acf.readInt();
		// 输出:name:lisi     age:38
		System.out.println("name:" + new String(by2) + " age:" + age2);
		// 关闭流
		acf.close();
	}
	// 存储数据
	public static void write() throws IOException {
        // 读写模式,如果文件不存在,会自动创建
		RandomAccessFile acf = new RandomAccessFile("info.txt", "rw");
		// 添加一组数据
		acf.write("zhangsan".getBytes()); // 将8个字节的姓名写入文件之中
		acf.writeInt(28);     // 将4个字节的年龄写入文件之中
		// 添加一组数据
		acf.write("lisi    ".getBytes()); // 将8个字节的姓名写入文件之中
		acf.writeInt(38);     // 将4个字节的年龄写入文件之中
		// 关闭流
		acf.close();
	}
}
  • 追加数据案例

使用RandomAccessFile来追加文件内容,先获取到文件的长度,再将指针移到文件的末尾,最后将要插入的内容插入到文件。

获取到文件的长度

public native long length();

将文件记录指针定位到pos位置

public native void seek(long pos);

返回文件记录指针的当前位置

public native long getFilePointer();

【示例】追加数据案例

public class RandomAccessFileDemo {
// 存储数据
	public static void write() throws IOException {
		RandomAccessFile acf = new RandomAccessFile("info.txt", "rw");
		// 获取文件长度
		long length = acf.length();
		// 设置指针移到文件的末尾
		acf.seek(length);
		// 在添加一组数据
		acf.write("wangwu  ".getBytes()); // 将8个字节的姓名写入文件之中
		// 获取当前指针的位置
		long pointer = acf.getFilePointer();
		System.out.println("当前指针的位置:" + pointer);
		acf.writeInt(48); // 将4个字节的年龄写入文件之中
		// 关闭流
		acf.close();
	}
}

通过指针操作,可以实现在 文件的任意位置插入或获取文件内容。

ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。

发布了92 篇原创文章 · 获赞 0 · 访问量 2602

猜你喜欢

转载自blog.csdn.net/zhoujunfeng121/article/details/104751918