Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

eli oliotiedostojen käsittely

Samankaltaiset esitykset


Esitys aiheesta: "eli oliotiedostojen käsittely"— Esityksen transkriptio:

1 eli oliotiedostojen käsittely
Javan oliovirrat eli oliotiedostojen käsittely

2 Olio- eli objektitiedostojen käsittely
Käsittely täysin samanlaista kuin muiden tiedostojen Otetaan yhteys fyysiseen tietovarastoon ja luodaan tiedostoyhteys Kirjoitetaan tiedosto / luetaan tiedosto Suljetaan yhteys

3 Oliotiedoston kirjoittaminen
ObjectOutputStream tiedostoNimi; tiedostoNimi = new ObjectOutputStream (new FileOutputStream(”tiedosto.dat")); Huomaa: tiedoston sisältö on tavuvirtaa (stream) Kirjoitetaan olio tiedostoon: tiedostoNimi.writeObject(olio);

4 Oliotiedoston lukeminen
ObjectInputStream tiedostoNimi; tiedostoNimi = new ObjectInputStream (new FileInputStream(”tiedosto.dat")); Huomaa: tiedoston sisältö on tavuvirtaa (stream) Luetaan Object-luokan ilmentymä: object = tiedostoNimi.readObject();

5 ObjectInputStream. lukee Object- luokan ilmentymiä ObjectOutputStream
ObjectInputStream lukee Object- luokan ilmentymiä ObjectOutputStream kirjoittaa Object- luokan ilmentymiä ? entä omat luokkamme

6 Miten saadaan omien luokkien ilmentymiin mukaan luokkakuvaukset?

7 Sarjallistaminen l. Object Serialization
java.io.Serializable rajapinta ei sisällä yhtään metodia tehtävänä organisoida olioiden ja niiden luokkakuvausten tiedostotalletus (+ versiointi, ”sormenjälkitunnistus” jne)

8 Esimerkki 1 //lyhennetty alkuperäisestä import java.io.Serializable;
public class Ajoneuvo implements Serializable { private String merkki; private String rekisterinumero; private int lukema; private double keskikulutus; public Ajoneuvo() { merkki = null; rekisterinumero = null; lukema = 0; keskikulutus = 0.0; } }

9 public String toString(){
String paluu; paluu = paluu + lukema + " " + keskikulutus + " l/100 km"; return paluu; } }

10 Ajoneuvotietojen kirjoittaminen
Ajoneuvo ajoneuvo; ObjectOutputStream autoTiedosto; autoTiedosto = new ObjectOutputStream (newFileOutputStream(”ajokit.dat")); hanki ajoneuvotiedot; while (tietoja riittää) { autoTiedosto.writeObject(ajoneuvo); } autoTiedosto.close();

11 Ajoneuvotietojen lukeminen
Ajoneuvo ajoneuvo; ObjectInputStream ajokit; autoTiedosto = new ObjectInputStream (new FileInputStream(”ajokit.dat")); ajoneuvo = (Ajoneuvo)autoTiedosto.readObject(); while (ajoneuvo != null) { System.out.println(ajoneuvo.toString()); } autoTiedosto.close(); Näppäimistöltä lukeminen:

12 Usean luokan olioiden talletus samaan tiedostoon
Ajoneuvo ja siitä periytetty HenkiloAuto - kun Ajoneuvoon lisätään Serializable rajapinta, HenkiloAuto perii sen molempien luokkien ilmentymät kirjoitetaan tiedostoon ”ajokit”: ajokit.writeObject(ajoneuvo); ajokit.writeObject(henkiloauto); sujuu mutkattomasti

13 Oliotiedoston lukeminen
Kun tiedostoa luetaan, ei voi olla varma eri luokkien ilmentymien järjestyksestä tarvitaan esimerkiksi instanceof-operaattoria Tarvittavat luokat: Ajoneuvo ajo; HenkiloAuto hauto; Object object; ObjectInputStream tdsto = new ObjectInputStream(new FileInputStream(name));

14 object = tdsto.readObject();
while(object != null){ if (object instanceof HenkiloAuto) { hauto = new HenkiloAuto((HenkiloAuto) object); System.out.println(hauto.toString()); } else if (object instanceof Ajoneuvo){ ajo = new Ajoneuvo((Ajoneuvo) object); System.out.println(ajo.toString()); } else System.out.println("Tuntematon luokka”); object = tdsto.readObject(); } tdsto.close();

15 HUOMAA: aloita if – else rakenne periytetystä luokasta
esimerkissä järjestys on HenkiloAuto – Ajoneuvo, koska halutaan käyttää HenkiloAuto-luokan metodeja ilmentymän käsittelyyn järjestys Ajoneuvo-HenkiloAuto toimii, mutta tällöin tulevat käyttöön vain Ajoneuvo-luokan metodit myös HenkiloAuto-luokan ilmentymässä Vinkki: kokeile Ajoneuvo-HenkiloAuto-järjestystä ja katso kuinka tulostus muuttuu…

16 Poikkeustilanteisiin varautuminen
Poikkeustilanteet Poikkeustilanteisiin varautuminen java.lang.ClassNotFoundException java.lang.CastClassException java.io.InvalidClassException java.io.InvalidObjectException

17 Muita mielenkiintoisia java.io-pakkauksen luokkia
File, esimerkki: import java.io.*; public class TiedostoTutkinta{ public static void main (String [] args) { try{ File ajokit = new File("ajokit.dat"); String erotin = ajokit.pathSeparator; String polku = ajokit.getPath(); boolean onTdsto = ajokit.isFile(); boolean onKirjoitettava = ajokit.canWrite(); long koko = ajokit.length();

18 System. out. println("Polkuerotin: " + erotin +
System.out.println("Polkuerotin: " + erotin "\npolku: " + polku + "\non tiedosto: " + onTdsto "\non kirjoitettava: " + onKirjoitettava "\ntiedoston koko: " + koko + " tavua"); } catch(Exception e) { System.out.println(e.getMessage()); } } }

19 Tulostaa: Polkuerotin: ; polku: ajokit.dat on tiedosto: true on kirjoitettava: true tiedoston koko: 260 tavua

20 Kannattaa tutustua myös luokkiin
DataInputStream DataOutputStream


Lataa ppt "eli oliotiedostojen käsittely"

Samankaltaiset esitykset


Iklan oleh Google