All pastes #971329 Raw Edit

Stuff

public java v1 · immutable
·published 2008-04-04 17:36 UTC
rendered paste body
/** * @(#)Tallentaja.java * Tallentaja on luokka, jonka oliolle annetaan * lauma Tallennettava-rajapinnan toteuttavia olioita ArrayList:inä. * Tallentaja tallentaa oliot niiden toTiedosto toteutuksen * perusteella tekstitiedostoon.  * Lukurutiinia kutsuttaessa Tallentaja luo oliot uudelleen * tallennetun tiedon perusteella ja palauttaa ne ArrayListinä. * * toTiedosto toteutuksen on palautettava olion sisältämät * tiedot siinä järjestyksessä, kuin luokasta löytyvä  * konstruktori argumentteinaan edellyttää. Vain String,  * int ja double ovat toistaiseksi sallittuja tietotyyppejä. *  * * @author Pauli Räinä * @version 2.00 2008/3/17 Shuffle-edit. */import java.lang.reflect.*;import java.util.*;import java.io.*;public class Tallentaja {	/** Polku käytettävään tiedostoon. */	private String kohde;		/** Lukuolio */	private BufferedReader luku;		/** Kirjoitusolio */	private PrintWriter kirj;	/** Konstuktori, joka käyttää suorituspolussa olevaa	 * Tallennus-tiedostoa. */    public Tallentaja() {    	kohde = "./Tallennus";    	init();     }        /** Konstuktori, joka käyttää argumenttina saatavassa      * polussa sijaitsevaa tiedostoa. */    public Tallentaja(String kohde) {    	this.kohde = kohde;    	init();    }        /** Luodaan tiedosto, jos sitä ei ole      * AE: true */    private void init() {    	File tied = new File(kohde);		if (!tied.exists()) {			try {				tied.createNewFile();			} catch (Exception e) {}		}    }        /** Tallennusrutiini      *AE: tiedostot.size() > 0;      */    public void tallenna(ArrayList<Tallennettava> tiedostot) {    	try {      			    	kirj = new PrintWriter(new FileWriter(kohde),true);	    	Iterator<Tallennettava> iter = tiedostot.iterator();	    		    	while (iter.hasNext()) {	    		Tallennettava talolio = iter.next();	    		String tyyppi = talolio.annaLuokka();	    		ArrayList<Object> t = talolio.toTiedosto();	    		String rivi = tyyppi;	    		for (int i = 0; i < t.size(); i++) {	    			rivi = rivi + ";" + t.get(i);	    		}	    				    	kirj.println(rivi);	    	}		    kirj.close();    	} catch (Exception e) {  }    }            /** Lukurutiini kohdeargumentilla.     * Palauttaa tyhjän ArrayList:in, jos tietoja ei pystytä lukemaan     * AE: true     */    public ArrayList<Tallennettava> lue(String kohde) {    	this.kohde = kohde;    	return lue();    }            /** Lukurutiini      * Palauttaa tyhjän ArrayList:in, jos tietoja ei pystytä lukemaan     * AE: true     **/    public ArrayList<Tallennettava> lue() {		ArrayList<Tallennettava> valmiit = new ArrayList<Tallennettava>();				try {			luku = new BufferedReader(new FileReader(kohde));			String rivi = luku.readLine();		    	while (!(rivi == null)) {	    		String[] tiedot = rivi.split(";"); 	    			    		ArrayList<Object> args = new ArrayList<Object>();	    		    			// Konvertoidaan tiedot[] (pl. tiedot[0]) ->     			// ArrayList<Object> args    			for (int i = 1; i < tiedot.length; i++) {    				    				// Onko int?    				try {    					args.add(Integer.parseInt(tiedot[i]));    				} catch (NumberFormatException nfe) {    					// Ei ole int, onko double?    					try {    						args.add(Double.parseDouble(tiedot[i]));    					} catch (NumberFormatException nfe2) {    						//ei ole int, täytyy olla String.    						args.add(tiedot[i]);    					}    				}	    		}    		for (int i = 0; i < args.size(); i++) {    		System.out.println(args.get(i));    		}	    			    			// END konvertointi    							// luodaan kyseinen olio, tyyppiä tiedot[0] 				// argumentilla ArrayList<Object> args.				try {					String name = tiedot[0];										// Haetaan Stringille luokka					Class<?> cl = Class.forName(name);										// Haetaan konstruktori parametrilla					java.lang.reflect.Constructor constructor =						cl.getConstructor							(new Class[] {ArrayList.class});										// Luodaan olio					Object obj =						constructor.newInstance							(new Object[]{args});					valmiit.add((Tallennettava)obj);				    			} catch (Exception e) {    				System.out.println("Tallentaja: Olion luonti failasi luettaessa");    			}    			// END luonti	    			    			    		rivi = luku.readLine();	    	}	    	luku.close();    	} catch (Exception e) {  }    	    	return valmiit;    }}