Você está aqui: Java ::: Dicas & Truques ::: Arquivos e Diretórios

Escrevendo e lendo tipos primitivos em um arquivo usando a classe RandomAccessFile

Quantidade de visualizações: 8843 vezes
A classe RandomAccessFile fornece muitos métodos para escrever e ler tipos primitivos em um arquivo. Esta dica detalha os principais e fornece alguns exemplos.

Vamos começar com os métodos de escrita: writeBoolean(boolean v), writeChar(int v), writeDouble(double v), writeFloat(float v), writeInt(int v), writeLong(long v), writeShort(int v) e writeUTF(String str). Todos estes métodos são void e a maioria escreve seus valores como grupos de bytes. Algumas diferenças entre eles estão documentadas na API Java.

Agora os métodos de leitura:

1) readBoolean() - retorna um boolean;
2) readChar() - retorna um caractere Unicode;
3) readDouble() - retorna um double;
4) readFloat() - retorna um float;
5) readInt() - retorna um inteiro de 32 bits com sinal;
6) readLong() - retorna um inteiro de 64 bits com sinal;
7) readShort() - retorna um inteiro de 16 bits com sinal;
8) readUnsignedShort() - retorna um inteiro de 16 bits sem sinal.

Veja um trecho de código no qual usamos os métodos writeInt() e readInt() para escrever e ler inteiros em um arquivo:

import java.io.*;

public class Estudos{
  public static void main(String[] args){
    // uma instância de RandomAccessFile para leitura e escrita
    // se o arquivo não existir ele será criado
    try{
      RandomAccessFile arquivo = 
        new RandomAccessFile("C:\\java\\valores.dat", "rw");

      // vamos escrever inteiros no arquivo
      arquivo.writeInt(38);
      arquivo.writeInt(7273);
      arquivo.writeInt(1200);      
 
      arquivo.close();    
    }
    catch(FileNotFoundException fnfe){
      System.out.println(fnfe.getMessage());
    }
    catch(IOException ioe){
      System.out.println(ioe.getMessage());
    }

    // vamos fazer a leitura dos escritos gravados anteriormente
    try{
      RandomAccessFile arquivo = 
        new RandomAccessFile("C:\\java\\valores.dat", "r");

      int tam = (int)(arquivo.length() / 4); // grupo de 4 bytes
      for(int i = 0; i < tam; i++){
        System.out.println(arquivo.readInt());
      }     
 
      arquivo.close();    
    }
    catch(FileNotFoundException fnfe){
      System.out.println(fnfe.getMessage());
    }
    catch(IOException ioe){
      System.out.println(ioe.getMessage());
    }    

    System.exit(0);
  }
}

É possível misturar os métodos de escrita e leitura dos tipos primitivos, mas, temos que ficar atentos para não tentarmos ler um int a partir de um arquivo que só contém booleans, por exemplo. Veja:

import java.io.*;

public class Estudos{
  public static void main(String[] args){
    // uma instância de RandomAccessFile para leitura e escrita
    // se o arquivo não existir ele será criado
    try{
      RandomAccessFile arquivo = 
        new RandomAccessFile("C:\\java\\valores.dat", "rw");

      // vamos escrever um float
      arquivo.writeFloat(15.79f);
      // vamos escrever um boolean
      arquivo.writeBoolean(true);
      // vamos escrever um short
      arquivo.writeShort(132);      
 
      arquivo.close();    
    }
    catch(FileNotFoundException fnfe){
      System.out.println(fnfe.getMessage());
    }
    catch(IOException ioe){
      System.out.println(ioe.getMessage());
    }

    // vamos fazer a leitura dos primitivos escritos 
    // anteriormente
    try{
      RandomAccessFile arquivo = 
        new RandomAccessFile("C:\\java\\valores.dat", "r");

      // vamos ler o float
      System.out.println(arquivo.readFloat());
      // vamos ler o boolean
      System.out.println(arquivo.readBoolean());
      // vamos ler o short
      System.out.println(arquivo.readShort());    
 
      arquivo.close();    
    }
    catch(FileNotFoundException fnfe){
      System.out.println(fnfe.getMessage());
    }
    catch(IOException ioe){
      System.out.println(ioe.getMessage());
    }    

    System.exit(0);
  }
}

Não se esqueça que o ponteiro de arquivo é adiantado a cada leitura efetuada em um arquivo encapsulado por um objeto da classe RandomAccessFile.

Link para compartilhar na Internet ou com seus amigos:

Desafios, Exercícios e Algoritmos Resolvidos de Java

Veja mais Dicas e truques de Java

Dicas e truques de outras linguagens

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 30 usuários muito felizes estudando em nosso site.