eli oliotiedostojen käsittely

Slides:



Advertisements
Samankaltaiset esitykset
Minimaalinen Java-ohjelma •Kaikki ohjelmakoodi on luokkamäärityksen sisällä •Ohjelma käynnistyy ”public static void main(String[] args)”-metodista •System.out.print()
Advertisements

Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
6. Metodit.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 13 Monimuotoisuus.
16. Javan omat luokat.
© 2004 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice Java-perusteet Kari Kujansuu
Ict1td002: Ohjelmointitaito Kertaus Osio 2 - luokat - ilmentymät - viittaus- ja arvomuuttuja - ilmentymien taulukointi HAAGA-HELIA IltaTiko.
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
Tuloksellinen Java-ohjelmointi Luku 9 Taulukot ja perustietorakenteet
Jukka Juslin Poikkeukset ja niiden paikallistaminen * Jukka Juslin * Liittyy oppikirjan lukuun 11.
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
22. Taulukot.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
13. Pakkaukset.
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Yksinkertaiset graafiset syöttö- ja tulostustoiminnot.
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Tietorakenneluokkia 2: HashMap, TreeMap.
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
13. Hyvä ohjelmointitapa (osa 1)
7. Oliot ja viitteet.
String-vertailusta ja Scannerin käytöstä (1/2)
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
20. Javan omat luokat.
Kuinka niitä käsitellään
Tietovirrat ja tiedostot. Anne Benson Tiedon koodaus it-järjestelmissä pienin tietoyksikkö bitti –kaksi tilaa: nolla (sähkövirtaa ei ole) yksi (sähkövirtaa.
1 DataOutputStream ja DataInputStream DataOutputStream:lla voidaan tallentaa perustietotyyppien arvoja binäärimuotoiseen tiedostoon DataInputStream:lla.
1 Tietovirrat ja niiden suunnat Tietovirralla on aina suunta Tiedostoon tallentaessa käytetään OutputStream-luokasta perittyjä luokkia Tiedostosta luettaessa.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Näppäimistöltä lukeminen Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In -luokka.
22. Taulukot.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely.
Oliot ja luokat Oliot ja luokat Oliot (object) ja luokat (class) ovat keskeisiä olio- ohjelmoinnin käsitteitä. Olio-ohjelmointi on ohjelmointiparadigma,
Tiedostojen käsittely
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
Java - Tietokanta. JDBC=Java database connectivity  ODBC:n kaltainen ohjelmointiliittymä SQL- tietokantoihin  Koostuu Java-kehitysympäristön (esim.
Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
Sähköpostin lähetys Java- ohjelmasta Jukka Juslin.
Anne Benson Tietovirrat ja tiedostot. Anne Benson Tiedon koodaus it-järjestelmissä pienin tietoyksikkö bitti –kaksi tilaa: nolla (sähkövirtaa ei ole)
Tiedostot. 8.2 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen.
16. Javan omat luokat Sisällys Johdanto. Object -luokka: − toString -, equals -, clone - ja getClass -metodit. Comparable -rajapinta: − compareTo.
5. Kapselointi.
6. Tiedostot.
2. Taulukot.
14. Poikkeukset.
Kuinka niitä käsitellään
17. Javan omat luokat.
8. Näppäimistöltä lukeminen
4. Komentoriviparametrit
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
8. Näppäimistöltä lukeminen
Kuinka niitä käsitellään
14. Hyvä ohjelmointitapa.
2. Taulukot.
16. Javan omat luokat.
14. Poikkeukset.
Tiedon tulostaminen/kirjoittaminen ”WriteLine”
3. Attribuutit.
14. Poikkeukset.
4. Luokan testaus ja käyttö olion kautta
Esityksen transkriptio:

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

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

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();

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

Miten saadaan omien luokkien ilmentymiin mukaan luokkakuvaukset?

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)

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; } }

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

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

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:

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

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));

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();

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…

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

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();

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()); } } }

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

Kannattaa tutustua myös luokkiin DataInputStream DataOutputStream