Muutetaan vielä tuotteiden lukua oliomaisemmaksi, eli annetaan tuotteelle kuuluvat tehtävät kokonaan Tuote- luokan vastuulle, samalla lisätään Tuotteet- luokka.
import java.io.*; import fi.jyu.mit.ohj2.*; /** * Esimerkki oliosta joka käsittelee tiedostoa * @author Vesa Lappalainen * @version 1.0, 09.03.2003 */ public class LueRek { static public class Tuote { private String nimike = ""; private double hinta = 0.0; private int kpl = 0; public Tuote() {} public Tuote(String rivi) { parse(rivi); } public void parse(String s) throws NumberFormatException { StringBuffer sb = new StringBuffer(s); nimike = Mjonot.erotaEx(sb,'|',nimike); hinta = Mjonot.erotaEx(sb,'|',hinta); kpl = Mjonot.erotaEx(sb,'|',kpl); } public String toPrintString() { return Mjonot.fmt(nimike,-20) + " " + Mjonot.fmt(hinta,7,0) + Mjonot.fmt(kpl,4); } } static public class Tuotteet { private String nimi = ""; public Tuotteet(String nimi) { this.nimi = nimi; } public boolean tulosta(OutputStream os) { PrintStream out = Tiedosto.getPrintStream(os); BufferedReader fi = Tiedosto.avaa_lukemista_varten("tuotteet.dat"); if ( fi == null ) return false; out.println(); out.println(); out.println(); out.println("-------------------------------------------"); try { String rivi; Tuote tuote; while ( ( rivi = fi.readLine() ) != null ) { try { tuote = new Tuote(rivi); } catch (NumberFormatException ex) { System.err.println("Virhe: " + ex.getMessage()); continue; } out.println(tuote.toPrintString()); } } catch (IOException ex) { System.err.println("Vikaa tiedostoa luettaessa"); } finally { try { fi.close(); } catch (IOException ex) { System.err.println("Ongelmia tiedoston sulkemisessa"); } } out.println("-------------------------------------------"); out.println(); System.out.println(); System.out.println(); return true; } } public static void main(String[] args) { Tuotteet tuotteet = new Tuotteet("tuotteet.dat"); if ( !tuotteet.tulosta(System.out) ) { System.err.println("Tuotteita ei saada luetuksi"); } } }