Rumah  >  Artikel  >  Java  >  Fail Capaian Rawak

Fail Capaian Rawak

Barbara Streisand
Barbara Streisandasal
2024-11-10 08:42:02458semak imbas

Java membenarkan akses terus ke mana-mana kedudukan dalam fail dengan kelas RandomAccessFile, sesuai untuk memanipulasi data yang perlu dibaca atau ditulis tidak teratur. Tidak seperti kelas InputStream dan OutputStream, RandomAccessFile melaksanakan antara muka DataInput dan DataOutput, yang menyediakan kaedah untuk memanipulasi jenis data primitif (seperti int, double, dll.).

Struktur dan Pembina FailRandomAccess
Pembina:

RandomAccessFile(String nomeArquivo, String acesso)

  • nama fail: nama fail.
  • akses: mentakrifkan jenis akses ("r" untuk membaca, "rw" untuk membaca dan menulis).
  • Kaedah Cari(kedudukan panjang): Mentakrifkan kedudukan penuding dalam fail.
void seek(long novaPos) throws IOException

  • novaPos: Kedudukan dalam bait dari permulaan fail. Selepas mencari, membaca/menulis berlaku dari kedudukan baharu.

Contoh Kod: Akses Rawak kepada Nilai Berganda
Di bawah, contoh yang menulis enam nilai ganda pada fail dan kemudian membacanya pada kedudukan tertentu.

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);
    }
  }
}

Penjelasan Kod:
Penulisan: Nilai berganda ditulis pada fail random.dat. Memandangkan setiap rangkap dua menduduki 8 bait, setiap nilai bermula dalam gandaan 8 bait (0, 8, 16, ...).

Membaca dengan seek():

  • Nilai pertama: Bermula pada bait 0.
  • Nilai kedua: Bermula pada bait 8.
  • Nilai keempat: Bermula pada bait 24 (indeks ke-3, sejak 8 * 3 = 24).
  • Nilai berselang-seli: Setiap 16 bait (8 bait antara setiap nilai), nilai dibaca.

Output Kod
Contoh output:

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

Valores alternados:
19.4 123.54 87.9

Perkara Penting:
Kedudukan dengan seek(): Mentakrifkan kedudukan penuding untuk membaca/menulis di mana-mana dalam fail.
Kawalan Kedudukan dengan Bait: Memandangkan setiap rangkap dua menduduki 8 bait, kita boleh mengira kedudukan setiap nilai menggunakan gandaan 8.
Contoh ini berguna untuk mengendalikan sejumlah besar data dengan cekap, mengakses hanya titik yang diperlukan tanpa melintasi keseluruhan fail.

Arquivos de acesso aleatório

Atas ialah kandungan terperinci Fail Capaian Rawak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn