使用隨機存取檔案,我們可以從檔案讀取以及寫入檔案。使用檔案輸入和輸出流的讀取和寫入是順序過程。使用隨機存取檔案,可以在檔案中的任何位置讀取或寫入。RandomAccessFile
類的一個物件可以進行隨機檔案存取。可以讀/寫位元組和所有原始型別的值到一個檔案。
RandomAccessFile
可以使用其readUTF()
和writeUTF()
方法處理字串。RandomAccessFile
類不在InputStream
和OutputStream
類的類層次結構中。
可以在四種不同的存取模式中建立隨機存取檔案。存取模式值是一個字串。 它們列出如下:
模式 | 含義 |
---|---|
「r」 | 檔案以唯讀模式開啟。 |
「rw」 | 該檔案以讀寫模式開啟。 如果檔案不存在,則建立該檔案。 |
「rws」 | 該檔案以讀寫模式開啟。 對檔案的內容及其後設資料的任何修改就會立即被寫入儲存裝置。 |
「rwd」 | 該檔案以讀寫模式開啟。 對檔案內容的任何修改都會立即寫入儲存裝置。 |
通過指定檔案名和存取模式來建立RandomAccessFile
類的範例。
RandomAccessFile raf = new RandomAccessFile("randomtest.txt", "rw");
隨機存取檔案具有檔案指標,當從其讀取資料或向其寫入資料時,檔案指標向前移動。檔案指標是下一次讀取或寫入將開始的游標。其值指示游標與檔案開頭的距離(以位元組為單位)。
可以通過使用其getFilePointer()
方法來獲取檔案指標的值。當建立一個RandomAccessFile
類的物件時,檔案指標被設定為零。可以使用seek()
方法將檔案指標設定在檔案中的特定位置。
RandomAccessFile
類的length()
方法返回檔案的當前長度。可以通過使用其setLength()
方法來擴充套件或截斷檔案。
以下程式碼顯示如何使用RandomAccessFile
物件讀取和寫入檔案。
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
public class Main {
public static void main(String[] args) throws IOException {
String fileName = "randomaccessfile.txt";
File fileObject = new File(fileName);
if (!fileObject.exists()) {
initialWrite(fileName);
}
readFile(fileName);
readFile(fileName);
}
public static void readFile(String fileName) throws IOException {
RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
int counter = raf.readInt();
String msg = raf.readUTF();
System.out.println(counter);
System.out.println(msg);
incrementReadCounter(raf);
raf.close();
}
public static void incrementReadCounter(RandomAccessFile raf)
throws IOException {
long currentPosition = raf.getFilePointer();
raf.seek(0);
int counter = raf.readInt();
counter++;
raf.seek(0);
raf.writeInt(counter);
raf.seek(currentPosition);
}
public static void initialWrite(String fileName) throws IOException {
RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
raf.writeInt(0);
raf.writeUTF("Hello world!");
raf.close();
}
}
上面的程式碼生成以下結果。
0
Hello world!
1
Hello world!