Java IO--RandomAccessFile类

简介: <p><span style="font-size:18px">RandomAccessFile类的主要功能是完成随机读取功能,可以读取指定位置的内容。</span></p> <p><img src="http://img.blog.csdn.net/20131028150703109" alt=""><br></p> <p>因为在文件中,所有的内容都是按照字节存放的,都有固定的保存位

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


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



import java.io.File ;
import java.io.RandomAccessFile ;
public class RandomAccessFileDemo01{
	// 所有的异常直接抛出,程序中不再进行处理
	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,"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() ;				// 关闭
	}
};

以上完成了写入的操作,每条数据的长度都是12位。
写完之后,开始读取数据。写的时候可以将一个字符串写入。读的时候需要一个个的以字节的形式读取出来。
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数组变为字符串
		age = rdf.readInt() ;	// 读取数字
		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() ;				// 关闭
	}
};


目录
相关文章
|
3天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
27 3
|
7天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
8天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
12天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
13 0
|
12天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
16 0
|
14天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
22 9
|
14天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
30 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
15天前
|
存储 安全 Java
java多线程之原子操作类
java多线程之原子操作类
|
16天前
|
Java
Java中的异常类总结
Java中的异常类总结
|
16天前
|
Java
Java中的多线程实现:使用Thread类与Runnable接口
【4月更文挑战第8天】本文将详细介绍Java中实现多线程的两种方法:使用Thread类和实现Runnable接口。我们将通过实例代码展示如何创建和管理线程,以及如何处理线程同步问题。最后,我们将比较这两种方法的优缺点,以帮助读者在实际开发中选择合适的多线程实现方式。
22 4