Java IO操作——简单了解RandomAccessFile随机读写文件操作类的使用

JAVA—基础知识 同时被 2 个专栏收录
63 篇文章 0 订阅
63 篇文章 21 订阅

学习目标

掌握RandomAccessFile类的作用
可以使用RandomAccessFile读取指定位置的数据

RandomAccessFile类的主要功能是完成随机读取功能,可以读取指定位置的内容。
之前的File类只是针对文件本身进行操作的,而如果要想对文件内容进行操作,则可以使用RandomAccessFile类,此类属于随机读取类,可以随机读取一个文件中指定位置的数据,例如,现在假设文件中保存类以下三个数据:
zhangsan, 30
lisi, 31
wangwu, 32

因为在文件中,所有内容都是按照字节存放的,都有固定的保存位置。
RandomAccessFile类的常用的操作方法
1、public  RandomAccessFile(File file, String mode)throws FileNotFoundException  构造方法  接收File类的对象,指定操作路径,但是在设置时需要设置模式:"r": 只读、"w": 只写、"rw": 读写。
2、public RandomAccessFile(String name, String mode) throws FileNotFoundException 构造方法 不再使用File类对象表示文件,而是直接输入了一个固定的文件路径。
3、public void close() throws IOException   关闭操作
4、public int read(byte[] b) throws IOException 将内容读取到一个byte数组之中
5、public final byte readByte()  throws IOException 读取一个字节
6、public final int readInt()  throws IOException从文件中读取整型数据。
7、public void seek(long pos) throws IOException 设置读指针的位置。
8、public final void writeBytes(String s) throws IOException 将一个字符串写入到文件之中,按字节的方式处理。
9、public final void writeInt(int v) throws IOException 将一个int型数据写入文件,长度为4位。
10、public int skipBytes(int n) throws IOException 指针跳过多少个字节。
构造:public RandomAccessFile(File file, String mode)  throws FileNotFoundException
实例化此类的时候需要传递File类,告诉程序应该操作的是哪个文件,之后有一个模式,文件的打开模式,常用的两种模式:
r:读模式
w:只写
rw:读写,如果使用此模式,如果此文件不存在,则会自动创建。
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() ;				// 关闭
	}
};

如果想操作文件内容的话,可以使用RandomAccessFile完成

总结:
1、了解RandomAccessFile类的作用即可。
2、RandomAccessFile类操作起来比较麻烦,所以在IO中会提供专门的输入输出操作。

  • 10
    点赞
  • 4
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

Applet钢琴模拟程序java源码 2个目标文件,提供基本音乐编辑功能。编辑音乐软件朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机流程及操作:获取系统属性,初始化JNDI,取得Home对象引用,创建EJB对象,并将当前计数器初始化,调用每一个EJB对象count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt>账户余额抛出异常,一个实体Bean可以表示不同数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化上下文,用clientgetHome()函数调用Home接口函数得到远程接口引用,用远程接口引用访问EJB。 EJB中JNDI使用源码例子 1个目标文件,JNDI使用例子,有源代码,可以下载参考,JNDI使用,初始化Context,它是连接JNDI树起始点,查找你要对象,打印找到对象,关闭Context…… ftp文件传输 2个目标文件,FTP目标是:(1)提高文件共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间文件存储系统导致变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,但是它主要作用是供程序使用。本规范尝试满足大型主机、微型主机、个人工作站、和TACs 不同需求。例如,容易实现协议设计。 Java EJB中有、无状态SessionBean两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象引用,创建EJB对象,计算利息等;在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前计数器初始化,调用每一个EJB对象count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件,一个服务器,一个客户端。 Java Telnet客户端实例源码 一个目标文件,演示Socket使用Java 组播组中发送和接受数据实例 3个目标文件Java读写文本文件示例代码 1个目标文件java俄罗斯方块 一个目标文件Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密   Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。   设定字符串为“张三,你好,我是李四”   产生张三密钥对(keyPairZhang)   张三生成公钥(publicKeyZhang)并发送给李四,这里发送是公钥数组字节   通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后公钥,将其解码,李四用张三公钥加密信息,并发送给李四,张三用自己私钥解密从李四处收到信息…… Java利用DES私钥对称加密代码实例 同上 java聊天室 2个目标文件简单java模拟掷骰子2个 1个目标文件,输出演示。 java凭图游戏 一个目标文件简单java求一个整数因子 如题。 Java生成密钥实例 1个目标文件 摘要:Java源码,算法相关,密钥   Java生成密钥、保存密钥实例源码,通过本源码可以了解Java如何产生单钥加密密钥(myKey)、产生双钥密钥对(keyPair)、如何保存公钥字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从文件中得到公钥编码字节数组、如何从字节数组解码公钥。 Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输   Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印   util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值