9.12.3 输出记数
在使用二进制数据输出时常用的另外一个函数是size()。这个函数返回写入文件数据的总字 节数。你也可用size()函数将数据文件分成四字节为单位的块,例如:
int bytesLeft = myDataStream.size()%4;
for (int I = 0; I< bytesLeft; I++) {
myDataStrea.write(0);
}
9.13 随机访问文件
我们读文件常常不是从头至尾顺序读的。也许想将一文本文件当作一个
数据库, 读完一个记录后,跳到另一个记录,它们在文件的不同地方。
java提出了RandomAccessFile类让操作这种类型的输入输出。
9.13.1 创建随机访问文件
打开随机访问文件有两种方法:
1. 用文件名
myRAFile = new RandomAccessFile(String name,String mode);
2. 用文件对象
myRAFile = new RandomAccessFile(File file,String mode);
mode参数决定了访问文件的权限, 如只读'r'或读写'wr'等。
例如, 我们打开一个
数据库更新数据:
RandomAccessFile myRAFile;
myRAFile = new RandomAccessFile("/usr/db/stock.dbf","rw");
9.13.2 访问信息
RandomAccessFile对象的读写操作和DataInput/DataOutput对象的操作方式 一 样。 你可以使用在DataInputStream 和DataOutputStream里出现的所有read()和write()函数。
还有几个函数帮助你在文件里移动指针:
long getFilePo
inter(); 返回当前指针;
void seek(long pos); 将文件指针定位到一个绝对地址。地址是相对于文件头的偏移量。地址0表示文件的开头。
long length(); 返回文件的长度。 地址"length()"表示文件的结尾。
9.13.3 增加信息
你可以使用随机访问文件来设置成增加信息模式:
myRAFile = new RandomAccessFile("/tmp/
java.log","rw");
myRAFile.seek(myRAFile.length()); //Any subsequent write()s will be appended to the file
9.13.4 追加信息例子
下面是一个在已存在文件后面追加字符的例子:
import
java.io.IOException;
import
java.io.RandomAccessFile;
public class raTest {
public static void main(String args[]) throws IOException {
RandomAccessFile myFAFile;
String s = "Information to AppendnHi mom!n";
//open our random access file
myRAFile = new RandomAccessFile("/tmp/
java.log","rw");
//move to the end of the file
myRAFile.seek(myRAFile.length());
//Start appending!
myRAFile.writeBytes(s);
myRAFile.close();
}
}