Question

I'm using RandomAccessFile to create a database to a text file. Basically I created a normal store using an ArrayList and now i need to output the contents of the store using RandomAccessFile. But I am stuck on how to get the randomAccessFile method to take the student store. Here is my code:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.RandomAccessFile;


public class MainApp
{
    private RandomAccessFile File;

    public static void main(String[] args) throws Exception 
    {
        new MainApp().start();

    }
    public void start()throws Exception 
    {
        StudentStore details = new StudentStore();
        Student a = new Student("Becky O'Brien", "DKIT26", "0876126944", "bexo@hotmail.com");
        Student b = new Student("Fabio Borini", "DKIT28", "0876136944", "fabioborini@gmail.com");
        Student c = new Student("Gaston Ramirez", "DKIT29", "0419834501", "gramirez@webmail.com");
        Student d = new Student("Luis Suarez", "DKIT7", "0868989878", "luissuarez@yahoo.com");
        Student e = new Student("Andy Carroll", "DKIT9", "0853456788", "carroll123@hotmail.com");
        details.add(a);
        details.add(b);
        details.add(c);
        details.add(d);
        details.add(e);

        details.print();




        //Create a file object.
        File contactDetailsFile = new File("StudentDetails.txt");
        //Open a buffered output stream to allow write to file operations.
        PrintWriter out = new PrintWriter(
                          new BufferedWriter(
                          new FileWriter(contactDetailsFile)));   

        out.println(a);
        out.println(b);
        out.println(c);
        out.println(d);
        out.println(e);
        out.close();

        BufferedReader in = new BufferedReader(
                            new FileReader(contactDetailsFile));

        String line = in.readLine();
        System.out.println(line);

        out.close();

    }
/**
 * @param args the command line arguments
 */
public void RandomAccessFile(String filename) 
{

    RandomAccessFile randomAccessFile = null;
    try {

        //Declare variables that we're going to write
        String line1 = "First line\n";
        String line2 = "Second line\n";

        //Create RandomAccessFile instance with read / write permissions
        randomAccessFile = new RandomAccessFile(filename, "rw");

        //Write two lines to the file
        randomAccessFile.writeBytes(line1);
        randomAccessFile.writeBytes(line2);

        //Place the file pointer at the end of the first line
        randomAccessFile.seek(line1.length());

        //Declare a buffer with the same length as the second line
        byte[] buffer = new byte[line2.length()];

        //Read data from the file
        randomAccessFile.read(buffer);

        //Print out the buffer contents
        System.out.println(new String(buffer));

    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    } finally {
        try {

            if (randomAccessFile != null)
                randomAccessFile.close();

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

}   

}
Was it helpful?

Solution

In a word, yes.

You will, however, have to re-do your write-to-file part of this solution again. You must read objects back out the same way you wrote them.

From this example, you can see how each member is written using the RandomAccessFile object.

I would suggest that you make the read method from the example return a new Student object.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top