当前课程知识点:Java程序设计 > 第五章 输入输出 > 5.3.8-随机文件读写 > 随机文件读写
大家好
欢迎回来继续学习
Java语言程序设计
这一节我们来简单了解一下
随机文件的读写
我们知道Java
将数据的输入输出都看作字节流
所以从根本上来说
它对文件的随机读写
支持得并不是很好
在Java看来这个文件
是不带结构信息的
但是Java依然为我们
提供了有关文件读写的类
如果我们文件结构
自己能够设计好的话
随机读写也还是可以实现的
只是略有些麻烦
在RandomAccessFile这个类中
实际上它是为我们
提供了可以跳转到文件任意位置进行读写的这样的方法
那么到底我们想随机读写
如何跳转到文件的那些位置
那些位置怎么计算出来
这个都要靠我们
程序员自己来计算
所以一般来说
你要进行随机读写的文件
它应该是结构比较整齐的
你要读写的每一条记录
应该是等长的
否则的话你这样去移动读写位置
有的时候计算不精确
就可能造成错误
那么读写的数据就没有意义了
这个RandomAccessFile类
它是实现了DataInput
和DataOutput接口的
它是可以用普通的读写方法的
那么它给我们提供的
有关随机读写的特殊功能
就是移动位置指示器的功能
像这个skipBytes方法
seek方法、getFilePoint方法
就是干这样的事情用的
这里列出了这个类的构造方法
还有我们要注意在构造一个
RandomAccessFile对象的时候
还应该指出你想做什么操作
是仅仅读呢还是能读也能写
所以要指出它的操作来
在这个表中列出
RandomAccessFile类的常用的API
大家可以做一个参考
下面我们就来看一个
随机文件读写的例子
这个例子中演示了
一下文件的随机读写
注意要实现随机读写的话
文件的记录必须是等长的
如果是不等长的话
那是没法做随机读写的
所以我们在这儿规定姓名
不超过8个字符
所以姓名是放在一个
字符类型的数组里面去的
而不是用的String类型
因为String类型的对象
你可以把它初始化成任何长度
就很难保证你的写入的记录
是等长的了
那么在构造方法中
我们将这个成员数组
name和age初始化好
然后在这个后面的
这个writeEmployee readEmployee
这些方法中我们就
尝试着用这个seek方法去移动
读写指示器
这个具体逻辑非常简单
我建议大家课后
自己运行观察一下
在文件里面的读写
内容到底是什么是不是正确的
那么关键就是说用
seek准确的去定位到你的一个完整记录的开始位置
那么其他的逻辑都比较简单
在主方法中
我们就来测试一下
要指定从文件中读出
第几个雇员的信息
然后把它写在显示器上
那么这里我们把这雇员的编号
放进这个参数里面去
这个编号是从0开始的
那么这个时候
就调用了readEmployee方法
调用了readEmployee方法
它参数 是一个整数
然后我们在这里看到
会调用seek去按照
你指定的雇员的序号去移动读写指示器
然后从那个移动以后的位置
开始来读
我们来看如果你
设计的都是等长记录
而且计算准确的话
是能够这样正确读出这些信息的
大家可以去自己
运行测试一下这个程序
也可以替换一下文件
里面的不同对象内容
你尝试着自己写一个
读写不同内容的这个随机读写文件
好
在这一节我们简单的了解了一下
在Java中怎么样读写随机文件
这一节内容就是这些
-1.0-导学
--1.0-导学
-1.1-Java与面向对象程序设计简介
--第一章 Java语言基础知识--1.1-Java与面向对象程序设计简介
-1.2-基本数据类型与表达式
-第一章 Java语言基础知识--1.2-基本数据类型与表达式
-1.3-数组
--1.3.1-数组
-第一章 Java语言基础知识--1.3-数组
-1.4-算法的流程控制
--第一章 Java语言基础知识--1.4-算法的流程控制
-1.5-第一章小结
-第一章编程练习题
-课件
--外部链接
-Java环境配置、Eclipse使用、Helloworld程序详解
--使用eclipse建立Java项目、编写和运行Java程序
-Java数据类型
--Java整数类型
--Java浮点类型
--数据类型实战
--数据类型转换
--Java强制类型转换精度损失示例与表达式中的数据类型转换
-Java数组
-Java变量
--Java的变量
-命令行参数
--命令行参数的介绍
-2.0-导学
--2.0-导学
-2.1-面向对象方法的特性
--第二章 类与对象--2.1-面向对象方法的特性
-2.2-1-类声明与对象创建
--第二章 类与对象--2.2-1-类声明与对象创建
-2.2-2-数据成员
--第二章 类与对象--2.2-2-数据成员
-2.2-3-方法成员
--第二章 类与对象--2.2-3-方法成员
-2.2-4-包
--2.2-4-包
--第二章 类与对象--2.2-4-包
-2.2-5-类的访问权限控制
--第二章 类与对象--2.2-5-类的访问权限控制
-2.3-1-对象初始化
--第二章 类与对象--2.3-1-对象初始化
-2.3-2-内存回收
--第二章 类与对象--2.3-2-内存回收
-2.4-枚举类
--2.4-枚举类
--第二章 类与对象--2.4-枚举类
-2.5-应用举例
--2.5-应用举例
-2.6-第2章小结
-第二章编程练习题
-课件
--第二章课件
-3.0-导学
--3.0-导学
-3.1.1-3.1.2-类继承的概念和语法
--第三章 类的重用--3.1.1-3.1.2-类继承的概念和语法
-3.1.3-隐藏和覆盖
--第三章 类的重用--3.1.3-隐藏和覆盖
-3.2-Object 类
--第三章 类的重用--3.2-Object 类
-3.3-终结类与终结方法
--第三章 类的重用--3.3-终结类与终结方法
-3.4-抽象类
--3.4-抽象类
--第三章 类的重用--3.4-抽象类
-3.5-泛型
--3.5-泛型
--第三章 类的重用--3.5-泛型
-3.6-类的组合
--3.6-类的组合
-3.7-小结
--3.7-小结
-第三章编程练习题
-课件
--课件
-4.0-导学
--导学
-4.1-接口
--接口
--第四章 接口与多态--4.1-接口
-4.2.1-4.2.2-类型转换
--类型转换
--第四章 接口与多态--4.2.1-4.2.2-类型转换
-4.2.3-方法的查找
--方法的查找
--第四章 接口与多态--4.2.3-方法的查找
-4.3-多态的概念
--多态的概念
--第四章 接口与多态--4.3-多态的概念
-4.4-多态的应用举例
--多态的应用举例
--第四章 接口与多态--4.4-多态的应用举例
-4.5-构造方法与多态性
--构造方法和多态性
--第四章 接口与多态--4.5-构造方法与多态性
-4.6-本章小结
--本章小结
-第四章编程作业
-课件
--课件
-5.0-导学
--5.0-导学
-5.1.1-5.1.2-异常处理的概念
--第五章 输入输出--5.1.1-5.1.2-异常处理的概念
-5.1.3-5.1.5-异常的处理
--第五章 输入输出--5.1.3-5.1.5-异常的处理
-5.2-输入输出流的概念
--输入输出流的概念
--第五章 输入输出--5.2-输入输出流的概念
-5.3.1-写文本文件
--写文本文件
--第五章 输入输出--5.3.1-写文本文件
-5.3.2-读文本文件
--读文本文件
--第五章 输入输出--5.3.2-读文本文件
-5.3.3-写二进制文件
--写二进制文件
--第五章 输入输出--5.3.3-写二进制文件
-5.3.4-读二进制文件
--读二进制文件
-5.3.5-File类
--File类
-5.3.6-处理压缩文件
--处理压缩文件
-5.3.7-对象序列化
--对象序列化
-5.3.8-随机文件读写
--随机文件读写
-5.4-本章小结
--本章小结
-课件
--课件
-6.0-导学
--导学
-6.1-Java集合框架介绍
--第六章 对象群体的组织--6.1-Java集合框架介绍
-6.2-主要接口及常用的实现类
--第六章 对象群体的组织--6.2-主要接口及常用的实现类
-6.3-常用算法
--常用算法
-6.4-数组实用方法
-6.5-基于动态数组的类型(Vector, ArrayList)
--基于动态数组的类型(Vector, ArrayList)
-6.6-遍历Collection
-6.7-Map接口及其实现
-6.8-第6章小结
--第6章小结
-课件
--课件
-7.0-导学
--导学
-7.1-绘图
--绘图
-7.2-Swing基础
--Swing基础
-7.3-Swing的层次
--Swing的层次
-7.4-布局管理
--布局管理
-7.5-内部类
--内部类
-7.6-事件处理的基本概念
-7.7-事件派发机制
--事件派发机制
-7.8-顶层容器
--7.8-顶层容器
-7.9-中间层容器(一)
-7.10-中间层容器(二)
-7.11-原子组件(一)
-7.12-原子组件(二)
-7.13-原子组件(三)
-7.14-其它Swing特性
-7.15-第7章小结
-课件
--课件