Home > Java > javaTutorial > body text

Random Access Files

Barbara Streisand
Release: 2024-11-10 08:42:02
Original
456 people have browsed it

Java allows direct access to any position in a file with the RandomAccessFile class, ideal for manipulating data that needs to be read or written out of order. Unlike the InputStream and OutputStream classes, RandomAccessFile implements the DataInput and DataOutput interfaces, which provide methods for manipulating primitive data types (such as int, double, etc.).

RandomAccessFile Structure and Builder
Constructor:

RandomAccessFile(String nomeArquivo, String acesso)

Copy after login
  • filename: file name.
  • access: defines the type of access ("r" for reading, "rw" for reading and writing).
  • Seek(long position) method: Defines the position of the pointer within the file.
void seek(long novaPos) throws IOException

Copy after login
  • novaPos: Position in bytes from the beginning of the file. After seek, reading/writing happens from the new position.

Code Example: Random Access to Double Values
Below, an example that writes six double values ​​to a file and then reads them at specific positions.

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

Copy after login

Code Explanation:
Writing: Double values ​​are written to the random.dat file. As each double occupies 8 bytes, each value starts in multiples of 8 bytes (0, 8, 16, ...).

Reading with seek():

  • First value: Starts at byte 0.
  • Second value: Starts at byte 8.
  • Fourth value: Starts at byte 24 (3rd index, since 8 * 3 = 24).
  • Alternating values: Every 16 bytes (8 bytes between each value), the values ​​are read.

Code Output
Example output:

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

Valores alternados:
19.4 123.54 87.9

Copy after login

Important Points:
Positioning with seek(): Defines the position of the pointer to read/write anywhere in the file.
Position Control with Bytes: As each double occupies 8 bytes, we can calculate the position of each value using multiples of 8.
This example is useful for handling large amounts of data efficiently, accessing only the necessary points without traversing the entire file.

Arquivos de acesso aleatório

The above is the detailed content of Random Access Files. For more information, please follow other related articles on the PHP Chinese website!

source:dev.to
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template