1 / 20

Javan oliovirrat eli oliotiedostojen käsittely

Javan oliovirrat eli oliotiedostojen käsittely. 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.

Download Presentation

Javan oliovirrat eli oliotiedostojen käsittely

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 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); hanki ajoneuvotiedot; } 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()); 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.daton tiedosto: trueon kirjoitettava: truetiedoston koko: 260 tavua

  20. Kannattaa tutustua myös luokkiin • DataInputStream • DataOutputStream

More Related