Lataa esitys
Esittely latautuu. Ole hyvä ja odota
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
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.