写入随机访问文件

时间:2012-09-17 17:55:54

标签: java file streamwriter

我有一个项目,我必须写一个随机访问文件。

我正在阅读一个国家,其中包含一些信息,包括:身份证,姓名,独立年份等。这些信息是我必须写入文件的。

我的问题是:

  • 如何衡量我在随机访问文件中写入的记录的大小? 我知道如何通过:filewrite.int(variable)来做到这一点。但是这个项目要求我以某种方式对每个角色的编写位置保持不变。

  • 我知道2个字节是一个字符,但我怎么能说“我想写这一行(每行都是一个有信息的国家)所以写一行从字节1到字节15并有一个恒定大小“?

谢谢!

3 个答案:

答案 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)

Read more at Ankit.co

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中随机访问文件的帖子