Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.

Samankaltaiset esitykset


Esitys aiheesta: "Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan."— Esityksen transkriptio:

1 Javan oliovirrat eli oliotiedostojen käsittely

2 Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan yhteys fyysiseen tietovarastoon ja luodaan tiedostoyhteys 2.Kirjoitetaan tiedosto / luetaan tiedosto 3.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 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 Ajoneuvo ajoneuvo; ObjectOutputStream autoTiedosto; autoTiedosto = new ObjectOutputStream (newFileOutputStream(”ajokit.dat")); hanki ajoneuvotiedot; while (tietoja riittää) { autoTiedosto.writeObject(ajoneuvo); hanki ajoneuvotiedot; } autoTiedosto.close(); Ajoneuvotietojen kirjoittaminen

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()); ajoneuvo = (Ajoneuvo)autoTiedosto.readObject(); } autoTiedosto.close();

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 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 + "\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 "Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan."

Samankaltaiset esitykset


Iklan oleh Google