review28
前面介绍了指向文件的输入流和输出流。随机流是既能读文件也能写文件。
RandomAccessFile类创建的流称做随机流,与前面的输入、输出流不同的是,RandomAccessFile类既不是InputStream类的子类,也不是OutputStream类的子类。但是RandomAccessFile类创建的流既可以作为流的源,也可以作为流的目的地,换句话说,当准备对一个文件进行读写操作时,创建一个指向该文件的随机流即可,这样既可以从这个流中读取文件中的数据,也可以通过这个流写入数据到文件。
以下是RandomAccessFile类的两个构造方法。
RandomAccessFile(String name, String mode)参数name用来确定一个文件名,给出创建的流的源,也是流目的地。参数mode取r(只读)或rw(可读写),决定创建的流对文件的访问权利。
RandomAccessFile(File file, String mode)参数file是一个File对象,给出创建的流的源,也是流的目的地。参数mode取r(只读)或rw(可读写),决定创建的流对文件的访问权利。
RandomAccessFile流指向文件时,不刷新文件。
RandomAccessFile类中有一个方法seek(long a)用来定位RandomAccessFile流的读写位置,其中参数a确定读写位置距离文件开头的字节个数。
另外流还可以调用getFilePointer()方法获取流的当前位置。RandomAccessFile流对文件的读写比顺序读写更为灵活。
代码展示如下所示:
import java.io.IOException;
import java.io.RandomAccessFile; public class Test10 { public static void main(String[] args) {
// TODO Auto-generated method stub
RandomAccessFile inAndOut = null;
int data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; try {
inAndOut = new RandomAccessFile("E:/test/test03.txt", "rw");
for(int i = 0; i < data.length; i++)
{
inAndOut.writeInt(data[i]);//这是作为输出流
}
for(long i = data.length - 1; i >= 0; i--)
{
inAndOut.seek(i * 4);
System.out.printf(" %d", inAndOut.readInt());//这是作为输入流
}
inAndOut.close();
}
catch (IOException e)
{ } } }
程序运行后,在test03.txt文件中将会写入10个整数,然后并在控制台输出这10个整数。截图如下所示:

需要注意的是,RandomAccessFile流的readLine()方法在读取含有非ASCII字符的文件时(比如含有汉字的文件)会出现“乱码”现象,因此,需要把readLine()读取的字符串用“iso-8859-1”编码重新编码存放到byte数组中,然后再用当前机器的默认编码将该数组转化为字符串。
import java.io.IOException;
import java.io.RandomAccessFile; public class Test11 { public static void main(String[] args) {
// TODO Auto-generated method stub
RandomAccessFile in = null;
try{
in = new RandomAccessFile("E:/test/test01.txt", "rw");
long length = in.length();
long position = 0;
in.seek(position);
while(position < length)
{
String str = in.readLine();
byte b[] = str.getBytes("iso-8859-1");
str = new String(b);
position = in.getFilePointer();
System.out.println(str);
}
in.close();
}
catch(IOException e){}
} }
程序运行之后会把test01.txt的数据读出并显示出来。

字节流读取数据使用的是字节数组,字符流读取数据使用的是字符数组,缓冲流读取数据的时候使用的是字符串,用readLine()来实现读取一个文本行。
随机流读取数据的时候像缓冲流一样使用readLine()方法。
随机流与其他流不一样的地方在于它可以从指定位置开始读取数据。
总结
从以上分析可以看出RandomAccessFile最大两个特点:
1.可以指定位置开始操作;
2.既可以读,也可以写;
review28的更多相关文章
随机推荐
- JS HTML DOM 事件对象(onclick、onmouseenter)
HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序. 事件通常与函数结合使用,函数不会在事件发生前被执行! (如用户点击按钮). HTML DOM 事件 DOM: ...
- Markov chain
w https://en.wikipedia.org/wiki/Markov_chain https://zh.wikipedia.org/wiki/马尔科夫链 In probability theo ...
- Selenium IDE的使用
Selenium IDE 的作用 Selenium IDE 是Firefox 浏览器的一个插件, 它会记录你对Firefox的操作,并且可以回放它的操作. 在实际自动化测试中,不会用Selenium ...
- python面试题(六)
1 异常处理写法以及如何主动跑出异常(应用场景) try: """执行语句""" except: #异常类型 ""&qu ...
- python面试题(五)
1 谈谈你对面向对象的理解? 面向对象的编程---object oriented programming,简称:OOP,是一种编程的思想.OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数 ...
- 稀疏自动编码器 (Sparse Autoencoder)
摘要: 一个新的系列,来自于斯坦福德深度学习在线课程:http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial.本文梳理了该教程第一 ...
- orange安装文档
一.Orange简介 Orange是一个基于 OpenResty/Nginx 的 API Gateway,提供 API 及 “自定义规则” 的监控和管理,如访问统计.流量切分.AB 测试.API ...
- KGX滚动分页源码
源码描述: 本工具采用Jquery框架,通过jquery调用ashx获取并输出数据,示例中采用测试数据,可以自行扩展为图片等等 当下流行的分页方式,鼠标滚动下拉条会自动展示下一页信息,类似瀑布流的效果 ...
- PAT 天梯赛 L1-039. 古风排版 【字符串处理】
题目链接 https://www.patest.cn/contests/gplt/L1-039 思路 先根据 len 和 n 判断 有几个 列和几行,然后 从最右边 到 最左边 从上到下 将字符串 录 ...
- 大型网站系统与 Java 中间件实践
http://wanglizhi.github.io/2016/07/27/JavaWeb-And-MiddleWare/ 第一章 分布式系统介绍 分布式系统的定义:组件分布在网络计算机上,组件间仅仅 ...