Listing 6: FileViewer.java — A class for scrolling through a random access file

import java.io.*;
import java.util.*;

public class FileViewer
{
    private RandomAccessFile f;
    private Stack stk;
    private long topPos;
    ArrayList lines;
    private static final int SCREEN_SIZE = 24;

    public FileViewer(String fileName) throws IOException
    {
        f = new RandomAccessFile(fileName, "r");
        stk = new Stack();
        topPos = f.getFilePointer();
        lines = new ArrayList();
        readAndDisplay();
    }

    public void next() throws IOException
    {
        stk.push(new Long(topPos));
        topPos = f.getFilePointer();
        readAndDisplay();
    }

    public void previous() throws IOException
    {
        topPos = ((Long)stk.pop()).longValue();
        f.seek(topPos);
        readAndDisplay();
    }

    public void first() throws IOException
    {
        stk.clear();
        topPos = 0;
        f.seek(topPos);
        readAndDisplay();
    }

    public void last() throws IOException
    {
        do
        {
            stk.push(new Long(topPos));
            topPos = f.getFilePointer();
        } while (read());
        display();
    }

    public void close() throws IOException
    {
        f.close();
    }

    boolean read() throws IOException
    {
        String line = null;
        lines.clear();
        for (int i = 0; 
             i < SCREEN_SIZE && (line = f.readLine()) != null; 
             ++i)
        {
            lines.add(line);
        }
        return line != null;
    }

    void display()
    {
        for (int i = 0; 
             i < lines.size() && i < SCREEN_SIZE; ++i)
           System.out.println((String) lines.get(i));
    }

    void readAndDisplay() throws IOException
    {
        read();
        display();
    }
}
— End of Listing —