Acesso direto a arquivos

Reader, Writer, InputStream e OutputStream oferecem funcionalidades para a leitura ou escrita de seqüências de elementos básicos (caracteres ou bytes).

Há, no entanto, categorias de aplicações que necessitam acesso a pontos arbitrários de um arquivo de dados. Por exemplo, a leitura de registros de um banco de dados não deve ser realizada seqüencialmente.

Para suportar essa funcionalidade, o pacote java.io define a classe RandomAccessFile. Um dos construtores dessa classe toma como argumentos duas strings, a primeira com o nome do arquivo e a segunda com o modo de operação ("r" para leitura apenas, "rw" para leitura e escrita).

Os métodos para a manipulação da posição corrente do ponteiro no arquivo são:

void seek(long pos)
Seleciona a posição (em relação ao início do arquivo) para a próxima operação de leitura ou escrita;
long getFilePointer()
Retorna a posição atual do ponteiro do arquivo.

Além disso, o método long length() retorna o tamanho do arquivo em bytes.

Para a manipulação de conteúdo do arquivo, todos os métodos especificados pelas interfaces DataInput e DataOutput (por exemplo, readInt() e writeInt() para ler e escrever valores do tipo primitivo int) são implementados por essa classe.