簡體   English   中英

寫入隨機訪問文件

[英]Writing to a random access file

我有一個項目,必須在其中寫入隨機訪問文件。

我正在閱讀一個包含一些信息的國家,包括:身份證,姓名,獨立年限等。這些信息是我必須寫到文件中的內容。

我的問題是:

  • 如何測量我要在隨機訪問文件上寫入的記錄的大小? 我知道如何通過以下方式做到這一點: filewrite.int(variable) 但是該項目要求我以某種方式將我寫每個字符的位置保持不變。

  • 我知道2個字節是一個字符,但是我怎么說“我想寫這行(每行是一個有其信息的國家/地區),所以將行從字節1寫入字節15並具有恆定的大小”?

謝謝!

您不必測量記錄的大小。 在這種情況下,我想您應該為記錄的每個字段定義一個固定的長度。 這樣,您將始終知道一條記錄將持續多長時間。 您應該能夠使用RandomAccessFile 通讀該類的文檔。 如果您想使生活更輕松,請為您的特定文件編寫一個服務類,以包裝RandomAccessFile方法。

服務類的方法簽名的示例為:

void writeCountry(int recordNumber, String country) throws IllegalArgumentException;

然后,當您實現此功能時,您將進行一些數學運算以確定要尋找的位置以及向文件寫入的內容。

您可以為每個字段定義固定的長度。 然后將其格式化,然后將其寫出。 由於每一行都是固定數目的字符,因此您可以根據行數確定字節數。

您可以使用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");
}

請記住,如果該值大於字段,將會發生什么。

在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中的隨機訪問文件的文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM