Seeking
Problem
You need to read from or write to a particular location in a file, such as an indexed file.
Solution
Use a RandomAccessFile.
Discussion
The class
java.io.RandomAccessFile
allows you to move the read/write
position to any location within a file, or past the end when writing.
This allows you to create or access “files with holes” on
some platforms and lets you read/write indexed or other database-like
files in Java. The primary methods of interest are void(long where), which moves the position for the next read/write to
where; int
skipBytes(int
howmany), which
moves the position forward by howmany bytes; and
long
getFilePointer( )
,
which returns the position.
RandomAccessFile class also implements the
DataInput
and DataOutput
interfaces, so everything I said about DataStreams
in Section 9.14 also applies here. This example reads
a binary integer from the beginning of the file, treats that as the
position to read from, finds that position, and reads a string from
that location within the file.
import java.io.*; /** * Read a file containing an offset, and a String at that offset. */ public class ReadRandom { final static String FILENAME = "random.dat"; protected String fileName; protected RandomAccessFile seeker; public static void main(String argv[]) throws IOException { ReadRandom r = new ReadRandom(FILENAME); System.out.println("Offset is " + r.readOffset( )); System.out.println("Message is \"" + r.readMessage( ) + "\"."); } /** Constructor: save filename, construct ...