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 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
    }
}
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.218.171.212