[英]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");
}
請記住,如果該值大於字段,將會發生什么。
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);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.