Mega Code Archive

 
Categories / Java / File Input Output
 

Random File

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);     }   } }