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 ...

Get Java Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.