IT培训网 - IT职场人学IT技术上IT培训网
Java编程开发中文件的随机读写
时间:2016-08-31 14:30:00 来源:Java培训网 作者:IT培训网 已有:名学员访问该课程
随机读写是什么呢,该如何学习这方面内容呢,今天IT培训网小编就来给大家详细介绍一下,Java编程开发中文件的随机读写方面的知识点。
什么是随机读写?
随机读写是相对顺序读写而言的,所谓随机读写,是指可以在任何时候将存取文件的指针指向文件内容的任何位置。假设存在一个文件尺寸为1024个字节的文件,如果按照顺序存取原则的话,我们只能采用类似于FileStream.read()或者FileReader.readLine()的方式来一段一段,或者一行一行地读取,在多数情况下,这样仿佛没有问题。但是,请考虑下面两个场景:
数据不是整体传输,而是分块传输的:请注意,一般意义上的分块传输,数据块到达接收方(或者说被接收方接受下来)的顺序是不可预料的。一般的多线程下载软件(如网络蚂蚁),采取的做法都是启动多个线程分工抓取网络资源文件的不同分段,在此过程中,哪个数据块先被下载软件接受,那块数据后被接受,是不可预料的。
在一个大文件中快速定位:有事,我们很明确自己想读取的内容唉整个文件中的位置,例如,在一个尺寸达到2GB的文件中读取第1024*1024个字节。
以上场景不是顺序存取所擅长的。自然,不是顺序存取完全无能为力,只是代价和效率令人难以接受。
Java.io 包提供了 RandomAccessFile 类用于随机文件的创建和访问。使用这个类,可以跳转到文件的任意位置读写数据。程序可以在随机文件中插入数据,而不会破坏该文件的其他数据。此外,程序也可以更新或删除先前存储的数据,而不用重写整个文件。
RandomAccessFile类是Object类的直接子类,包含两个主要的构造方法用来创 建RandomAccessFile 的对象,如表 10-11 所示。
表 10-11 RandomAccessFile 类的构造方法 |
|
构造方法 |
功能描述 |
public RandomAccessFile(String name, String mode) |
指定随机文件流对象所对应的文件名,以 mode 表示对文件的访问模式 |
public RandomAccessFile (File file, String mode) |
以 file 指定随机文件流对象所对应的文件名,以 mode 表示访问模式 |
需要注意的是,mode 表示所创建的随机读写文件的操作状态,其取值包括:
• r:表示以只读方式打开文件。
• rw:表示以读写方式打开文件,使用该模式只用一个对象即可同时实现读写操作。
表 10-12 列出了 RandowAccessFile 类常用的方法及说明。
表 10-12 RandowAccessFile 的常用方法 |
|
方法 |
功能描述 |
long length() |
返回文件长度 |
void seek(long pos) |
移动文件位置指示器,pos 指定从文件开头的偏离字节数 |
int skipBytes(int n) |
跳过 n 个字节,返回数为实际跳过的字节数 |
int read() |
从文件中读取一个字节,字节的高 24 位为 0,若遇到文件结尾,返回-1 |
final byte readByte() |
从文件中读取带符号的字节值 |
final char readChar() |
从文件中读取一个 Unicode 字符 |
final void writeChar(inte c) |
写入一个字符,两个字节 |
【例 10-12】模仿系统日志,将数据写入到文件尾部。
//********** ep10_12.java **********
import java.io.*;
class ep10_12{
public static void main(String args[]) throws IOException{
try{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String s=in.readLine();
RandomAccessFile myFile=new RandomAccessFile("ep10_12.log","rw");
myFile.seek(myFile.length()); //移动到文件结尾
myFile.writeBytes(s+"\n"); //写入数据
myFile.close();
}
catch(IOException e){}
}
}
程序运行后在目录中建立一个 ep10_12.log 的文件,每次运行时输入的内容都会在该文件内容的结尾处添加。
- 上一篇:Java编程开发中文件与目录管理
- 下一篇:Java编程开发中文件的压缩处理