Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

17.5.1 Olio joka lukee itsensä

Muutetaan vielä tuotteiden lukua oliomaisemmaksi, eli annetaan tuotteelle kuuluvat tehtävät kokonaan Tuote- luokan vastuulle, samalla lisätään Tuotteet- luokka.

tiedosto\LueRek.java - esimerkki oliosta joka käsittelee tiedostoa

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


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys