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 RandomAccessFile */ public ReadRandom(String fname) throws IOException { fileName = fname; seeker = new RandomAccessFile(fname, "r"); } /** Read the Offset field, defined to be at location 0 in the file. */ public int readOffset( ) throws IOException { seeker.seek(0); return seeker.readInt( ); } /** read the message at the given offset */ public String readMessage( ) throws IOException { seeker.seek(readOffset( )); // move to where return seeker.readLine( ); // and read the String } }
18.218.171.212