Java 允許使用 RandomAccessFile 類別直接存取檔案中的任何位置,非常適合操作需要亂序讀取或寫入的資料。與InputStream和OutputStream類別不同,RandomAccessFile實作了DataInput和DataOutput接口,它們提供了操作原始資料類型(如int、double等)的方法。
RandomAccessFile 結構與產生器
建構子:
RandomAccessFile(String nomeArquivo, String acesso)
void seek(long novaPos) throws IOException
程式碼範例:隨機存取雙精確度值
下面是一個範例,將六個雙精度值寫入文件,然後在特定位置讀取它們。
import java.io.*; class RandomAccessDemo { public static void main(String args[]) { double data[] = { 19.4, 10.1, 123.54, 33.0, 87.9, 74.25 }; double d; // Abre e usa um arquivo de acesso aleatório try (RandomAccessFile raf = new RandomAccessFile("random.dat", "rw")) { // Grava os valores no arquivo for(int i = 0; i < data.length; i++) { raf.writeDouble(data[i]); } // Lê valores específicos com o método seek() raf.seek(0); // Busca o primeiro valor d = raf.readDouble(); System.out.println("Primeiro valor: " + d); raf.seek(8); // Busca o segundo valor d = raf.readDouble(); System.out.println("Segundo valor: " + d); raf.seek(8 * 3); // Busca o quarto valor d = raf.readDouble(); System.out.println("Quarto valor: " + d); System.out.println("\nValores alternados:"); for(int i = 0; i < data.length; i += 2) { raf.seek(8 * i); // Busca o i-ésimo valor d = raf.readDouble(); System.out.print(d + " "); } } catch(IOException exc) { System.out.println("Erro de I/O: " + exc); } } }
代碼說明:
寫入:將Double值寫入random.dat檔案。由於每個 double 佔用 8 個位元組,因此每個值都以 8 個位元組的倍數開始(0、8、16、...)。
使用seek()閱讀:
程式碼輸出
輸出範例:
Primeiro valor: 19.4 Segundo valor: 10.1 Quarto valor: 33.0 Valores alternados: 19.4 123.54 87.9
重要重點:
使用seek()定位:定義在檔案中任何位置讀取/寫入的指標位置。
使用位元組進行位置控制:由於每個 double 佔用 8 個位元組,因此我們可以使用 8 的倍數來計算每個值的位置。
此範例對於有效處理大量資料非常有用,僅存取必要的點而不遍歷整個文件。
以上是隨機存取文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!