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