我有一个项目,我必须在其中写入随机访问文件。
我正在阅读一个包含一些信息的国家/地区,包括:身份证、姓名、独立年份等。这些信息是我必须写入文件的内容。
我的问题是:
如何测量我在随机访问文件上写入的记录的大小?我知道如何通过:
filewrite.int(variable)
。但是该项目要求我以某种方式对每个字符的书写位置保持恒定的大小。我知道 2 个字节是一个字符,但我怎么能说“我想写这一行(每行是一个带有其信息的国家)所以写从字节 1 到字节 15 的行并具有恒定的大小”?
谢谢!
我有一个项目,我必须在其中写入随机访问文件。
我正在阅读一个包含一些信息的国家/地区,包括:身份证、姓名、独立年份等。这些信息是我必须写入文件的内容。
我的问题是:
如何测量我在随机访问文件上写入的记录的大小?我知道如何通过:filewrite.int(variable)
。但是该项目要求我以某种方式对每个字符的书写位置保持恒定的大小。
我知道 2 个字节是一个字符,但我怎么能说“我想写这一行(每行是一个带有其信息的国家)所以写从字节 1 到字节 15 的行并具有恒定的大小”?
谢谢!
您可以为每个字段定义固定长度。然后在写出之前格式化您的值。由于每行是固定数量的字符,您可以根据行数确定字节数。
您可以使用 Formatter 类来提供帮助。 http://docs.oracle.com/javase/6/docs/api/java/util/Formatter.html
具体看一下文档的宽度和精度部分。
看看这样的输出:
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");
}
请记住,如果值大于字段会发生什么。
您不必测量记录的大小。在这种情况下,我会说您应该为记录的每个字段定义一个固定长度。这样,您将始终知道记录将持续多长时间。您应该能够使用RandomAccessFile。通读该类的文档。如果您想让您的生活更轻松,请为您的特定文件编写一个服务类来包装 RandomAccessFile 方法。
服务类的方法签名示例如下:
void writeCountry(int recordNumber, String country) throws IllegalArgumentException;
然后,当您实现此功能时,您将进行一些数学运算来确定要查找的位置以及写入文件的内容。
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);
}
}
}
在ankit.co上查看我关于 Java 中的随机访问文件的帖子