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)
void seek(long novaPos) throws IOException
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():
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.
Atas ialah kandungan terperinci Fail Capaian Rawak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!