// File: IO21.java (Module 13) // // Author: Rahul Simha // Created: Nov 28, 1998 // // Reading and writing raw data - random access. import java.io.*; class Person { String name; int age; public Person (String name, int age) { this.age = age; if (name.length() > 5) this.name = name.substring (0,5); else { this.name = name; for (int i=name.length()+1; i<=5; i++) this.name = this.name + " "; } } public String toString () { return "Person: name=" + name + ", age=" + age; } } public class IO21 { public static void main (String[] argv) { try { File f = new File ("Persons.data"); int len = (int) f.length(); int recordSize = len / 3; System.out.println ("Record size = " + recordSize); // Let's get the second record. FileInputStream fis = new FileInputStream (f); DataInputStream dis = new DataInputStream (fis); dis.skipBytes (recordSize); char[] nameArray = new char[5]; for (int i=0; i<5; i++) nameArray[i] = dis.readChar(); String name = new String (nameArray); int age = dis.readInt(); System.out.println ("Read: name=" + name + ", age=" + age); dis.close(); // Using a RandomAccessFile RandomAccessFile raf = new RandomAccessFile (f, "rw"); raf.seek (recordSize); nameArray = new char[5]; for (int i=0; i<5; i++) nameArray[i] = raf.readChar(); name = new String (nameArray); age = raf.readInt(); System.out.println ("Read: name=" + name + ", age=" + age); // Writing. raf.seek (2*recordSize); Person p = new Person ("ddd", 24); raf.writeChars (p.name); raf.writeInt (p.age); // Read again. raf.seek (2*recordSize); nameArray = new char[5]; for (int i=0; i<5; i++) nameArray[i] = raf.readChar(); name = new String (nameArray); age = raf.readInt(); System.out.println ("Read: name=" + name + ", age=" + age); raf.close(); } catch (IOException e) { System.out.println (e); } } }