首頁 > Java > java教程 > 主體

隨機存取文件

Barbara Streisand
發布: 2024-11-10 08:42:02
原創
456 人瀏覽過

Java 允許使用 RandomAccessFile 類別直接存取檔案中的任何位置,非常適合操作需要亂序讀取或寫入的資料。與InputStream和OutputStream類別不同,RandomAccessFile實作了DataInput和DataOutput接口,它們提供了操作原始資料類型(如int、double等)的方法。

RandomAccessFile 結構與產生器
建構子:

RandomAccessFile(String nomeArquivo, String acesso)

登入後複製
  • 檔名:檔名。
  • access:定義存取類型(「r」表示讀取,「rw」表示讀取和寫入)。
  • Seek(long position) 方法:定義指標在檔案中的位置。
void seek(long novaPos) throws IOException

登入後複製
  • novaPos:從檔案開頭開始的位置(以位元組為單位)。查找後,從新位置開始讀取/寫入。

程式碼範例:隨機存取雙精確度值
下面是一個範例,將六個雙精度值寫入文件,然後在特定位置讀取它們。

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()閱讀:

  • 第一個值:從位元組 0 開始。
  • 第二個值:從位元組 8 開始。
  • 第四個值:從位元組 24 開始(第三個索引,因為 8 * 3 = 24)。
  • 交替值:每 16 個位元組(每個值之間 8 個位元組)讀取一次值。

程式碼輸出
輸出範例:

Primeiro valor: 19.4
Segundo valor: 10.1
Quarto valor: 33.0

Valores alternados:
19.4 123.54 87.9

登入後複製

重要重點:
使用seek()定位:定義在檔案中任何位置讀取/寫入的指標位置。
使用位元組進行位置控制:由於每個 double 佔用 8 個位元組,因此我們可以使用 8 的倍數來計算每個值的位置。
此範例對於有效處理大量資料非常有用,僅存取必要的點而不遍歷整個文件。

Arquivos de acesso aleatório

以上是隨機存取文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板