我有一个项目,我必须写一个随机访问文件。
我正在阅读一个国家,其中包含一些信息,包括:身份证,姓名,独立年份等。这些信息是我必须写入文件的。
我的问题是:
如何衡量我在随机访问文件中写入的记录的大小?
我知道如何通过:filewrite.int(variable)
来做到这一点。但是这个项目要求我以某种方式对每个角色的编写位置保持不变。
我知道2个字节是一个字符,但我怎么能说“我想写这一行(每行都是一个有信息的国家)所以写一行从字节1到字节15并有一个恒定大小“?
谢谢!
答案 0 :(得分:0)
您不必测量记录的大小。在这种情况下,我会说你应该为记录的每个字段定义一个固定的长度。这样,您将始终知道记录的持续时间。您应该可以使用RandomAccessFile。仔细阅读该课程的文档。如果您想让生活更轻松,请为您的特定文件编写一个服务类来包装RandomAccessFile方法。
服务类的方法签名示例如下:
void writeCountry(int recordNumber, String country) throws IllegalArgumentException;
然后当你实现这个时,你会做一些数学计算,找出要寻找的位置,以及写入文件的内容。
答案 1 :(得分:0)
您可以为每个字段定义固定长度。然后在写出之前格式化您的值。由于每一行都是固定数量的字符,因此您可以根据行数确定字节数。
您可以使用Formatter类来提供帮助。 http://docs.oracle.com/javase/6/docs/api/java/util/Formatter.html
具体来看一下doc的宽度和精度部分。
看看这样的输出:
public static void main(String [] args) {
Formatter formatter = new Formatter(System.out);
formatter.format("%5.5s %3.3s %3.3s %3.3s", "012345678901", "b", "c", "d");
}
请记住,如果值大于字段,应该会发生什么。
答案 2 :(得分:-1)
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessDemo
{
public static void main(String[] args)
{
try
{
RandomAccessFile raf = new RandomAccessFile("test.txt", "rw");
raf.writeInt(10);
raf.writeInt(20);
raf.writeInt(30);
raf.writeInt(400);
raf.seek((3 - 1) * 4); // For 3rd integer, We are doing 2 * size of Int(4).
raf.writeInt(99);
raf.seek(0); // Going back to start point
int i = 0;
while(raf.length()>raf.getFilePointer())
{
i = raf.readInt();
System.out.println(i);
}
raf.close();
}
catch (Exception e)
{
System.out.println(e);
}
}
}
上查看我在Java中随机访问文件的帖子