package dk.itu.oop.testexamf2004; import java.io.*; class Test4{ public static void main(String[] args){ PersonFileWriter pf = new PersonFileWriter("Persons.txt"); Person p1 = new Person("Knud",34); Person p2 = new Person("Lise",32); pf.print(p1); pf.print(p2); pf.close(); try{ PersonFileReader pfr = new PersonFileReader("Persons.txt"); Person pp1 = pfr.getNext(); System.out.println("Read: " + pp1); Person pp2 = pfr.getNext(); System.out.println("Read: " + pp2); pfr.close(); }catch(PersonFileReaderException uups){ System.out.println(uups); } printAllPersons("Persons.txt"); } static void printAllPersons(String fileName){ System.out.println("All persons in file: " + fileName); try{ PersonFileReader pfr = new PersonFileReader("Persons.txt"); while (pfr.hasMore()) System.out.println( pfr.getNext().toString() ); System.out.println("-----"); }catch(PersonFileReaderException uups){ System.out.println(uups); } } } class Person { private String name; private int age; Person(String name, int age){ this.name = name; this.age = age; } public String toString(){ return "Person " + name + " age " + age; //return "Person: " + name + " age: " + age; } } class PersonFileWriter { PrintWriter pw; PersonFileWriter(String fileName){ try{ pw = new PrintWriter(new FileWriter(fileName) ); }catch(IOException uups){ System.out.println(uups); } } void print(Person p){ pw.println( p.toString() ); } void close(){ pw.close(); } } class PersonFileReader { FileReader fr; StreamTokenizer t; PersonFileReader(String fileName){ try{ fr = new FileReader(fileName); t = new StreamTokenizer(fr); t.nextToken(); }catch(IOException uups){ System.out.println(uups); } } boolean hasMore(){ return t.ttype != StreamTokenizer.TT_EOF; } void close(){ try{ fr.close(); }catch(IOException uups){ System.out.println(uups); } } Person getNext() throws PersonFileReaderException{ try{ if (! t.sval.equals("Person") ) throw new PersonFileReaderException("Expected Person, found " + t.sval); t.nextToken(); String name = t.sval; t.nextToken(); if (! t.sval.equals("age") ) throw new PersonFileReaderException("Expected age, found " + t.sval); t.nextToken(); int age = (int)t.nval; t.nextToken(); return new Person(name, age); }catch(IOException uups){ throw new PersonFileReaderException(uups.toString()); } } } class PersonFileReaderException extends IOException{ public PersonFileReaderException(String msg){ super(msg); } }