Java tutorial
import java.io.DataInput; import java.io.DataOutput; import java.io.DataOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; public class RandomFileTest { public static void main(String[] args) { Employee[] staff = new Employee[3]; staff[0] = new Employee("Harry Hacker", 35000); staff[1] = new Employee("Carl Cracker", 75000); staff[2] = new Employee("Tony Tester", 38000); try { DataOutputStream out = new DataOutputStream(new FileOutputStream("employee.dat")); for (int i = 0; i < staff.length; i++) staff[i].writeData(out); out.close(); } catch (IOException e) { System.out.print("Error: " + e); System.exit(1); } try { RandomAccessFile in = new RandomAccessFile("employee.dat", "r"); int count = (int) (in.length() / Employee.RECORD_SIZE); Employee[] newStaff = new Employee[count]; for (int i = count - 1; i >= 0; i--) { newStaff[i] = new Employee(); in.seek(i * Employee.RECORD_SIZE); newStaff[i].readData(in); } for (int i = 0; i < newStaff.length; i++) newStaff[i].print(); } catch (IOException e) { System.out.print("Error: " + e); System.exit(1); } } } class Employee { public static final int NAME_SIZE = 40; public static final int RECORD_SIZE = 2 * NAME_SIZE + 8 + 4 + 4 + 4; private String name; private double salary; public Employee(String n, double s) { name = n; salary = s; } public Employee() { } public void print() { System.out.println(name + " " + salary); } public void writeData(DataOutput out) throws IOException { DataIO.writeFixedString(name, NAME_SIZE, out); out.writeDouble(salary); } public void readData(DataInput in) throws IOException { name = DataIO.readFixedString(NAME_SIZE, in); salary = in.readDouble(); } } class DataIO { public static String readFixedString(int size, DataInput dataInput) throws IOException { StringBuffer strBuffer = new StringBuffer(size); int count = 0; boolean more = true; while (more && count < size) { char aChar = dataInput.readChar(); count++; if (aChar == 0) more = false; else strBuffer.append(aChar); } dataInput.skipBytes(2 * (size - count)); return strBuffer.toString(); } public static void writeFixedString(String str, int size, DataOutput dataOutput) throws IOException { for (int i = 0; i < size; i++) { char aChar = 0; if (i < str.length()) aChar = str.charAt(i); dataOutput.writeChar(aChar); } } }