在Java中,隨機存取文件(Random Access File)通常使用java.io.RandomAccessFile
類來實現。這個類允許你讀取和寫入文件的任意位置,而不是像FileReader
和FileWriter
那樣只能從頭開始或追加到文件末尾。
RandomAccessFile
類提供了用于讀取和寫入文件內容的各種方法,如read()
, write()
, seek()
, skipBytes()
, 等等。這些方法允許你以任何順序讀取和寫入文件的內容。
以下是一個簡單的示例,演示了如何使用RandomAccessFile
類來讀取和寫入文件的特定位置:
import java.io.IOException;
import java.io.RandomAccessFile;public class RandomAccessFileExample {public static void main(String[] args) {String fileName = "example.dat";try (RandomAccessFile raf = new RandomAccessFile(fileName, "rw")) {// 寫入數據到文件的開始位置raf.writeBytes("Hello, ");// 移動到文件的末尾raf.seek(raf.length());// 在文件末尾寫入數據raf.writeBytes("World!");// 移動到文件的開始位置raf.seek(0);// 讀取文件的內容byte[] buffer = new byte[1024];int bytesRead = raf.read(buffer);System.out.println(new String(buffer, 0, bytesRead)); // 輸出 "Hello, World!"} catch (IOException e) {e.printStackTrace();}}
}
在上面的示例中,我們首先創建了一個名為example.dat
的RandomAccessFile
對象,并指定了讀寫模式(“rw”)。然后,我們使用writeBytes()
方法向文件的開始位置寫入字符串"Hello, “。接著,我們使用seek()
方法將文件指針移動到文件的末尾,并使用writeBytes()
方法向文件末尾寫入字符串"World!”。最后,我們再次使用seek()
方法將文件指針移動到文件的開始位置,并使用read()
方法讀取文件的內容。
注意,在讀取文件時,我們創建了一個字節數組buffer
來存儲讀取的數據。read()
方法嘗試讀取最多buffer.length
個字節的數據,并將其存儲在buffer
數組中。實際讀取的字節數由read()
方法返回,并用于創建新的字符串。這是因為read()
方法可能不會讀取整個buffer
數組,特別是當文件較小時。
此外,請注意,當使用RandomAccessFile
類時,你需要手動管理文件指針的位置。如果你忘記調用seek()
方法來設置文件指針的位置,那么你可能會意外地覆蓋文件的內容或讀取錯誤的數據。