270 likes | 418 Vues
Tietovirrat ja niiden suunnat. Tietovirralla on aina suunta Tiedostoon tallentaessa käytetään OutputStream-luokasta perittyjä luokkia Tiedostosta luettaessa käytetään InputStream-luokasta perittyjä luokkia. Output stream. Koodi. Tiedosto. Koodi. Tiedosto. Input stream.
E N D
Tietovirrat ja niiden suunnat • Tietovirralla on aina suunta • Tiedostoon tallentaessa käytetään OutputStream-luokasta perittyjä luokkia • Tiedostosta luettaessa käytetään InputStream-luokasta perittyjä luokkia Output stream Koodi Tiedosto Koodi Tiedosto Input stream
OutputStream ja InputStream OutputStream (abstrakti) Tallennus tavuina FileOutputStream ObjectOutputStream Olioiden tallennus FilterOutputStream (abstrakti) DataOutputStream Perustietotyyppien tallennus InputStream (abstrakti) FileInputStream Ylläolevilla luokilla tallennetuntiedon lukemiseen käytettävätluokat ObjectInputStream FilterInputStream (abstrakti) DataInputStream
Tietovirtojen käyttö • Tiedostoon tallennus • Avataan tiedosto tallennusta varten • Alustetaan tallennustietovirta • Kutsutaan tietovirran metodeja tiedon tallentamiseksi • Tyhjennetään tietovirta levylle • Suljetaan tietovirta ja tiedosto Tiedoston luku • Avataan tiedosto lukua varten • Alustetaan lukutietovirta • Kutsutaan tietovirran metodeja tiedon lukemiseksi • Suljetaan tietovirta ja tiedosto
FileInputStream – esimerkki try { File file = new File(”tiedosto.bin”); FileInputStream inStream = new FileInputStream(file); byte[] inputArray = new byte[5]; inStream.read(inputArray); // lukee 5 tavua System.out.println(inputArray); } catch (IOException e) { System.out.println(”ERROR: ” + e); }
DataOutputStream ja DataInputStream • DataOutputStream:lla voidaan tallentaa perustietotyyppien arvoja binäärimuotoiseen tiedostoon • DataInputStream:lla voidaan lukea DataOutputStream:lla tallennettua binääritiedostoa • Java ei tarkasta luettavan tiedon järkevyyttä, joten käyttäjän on tiedettävä tarkasti mitä tietotyyppejä ja missä järjestyksessä tiedostoon on tallennettu
DataOutputStream - tallennus try { File file = new File(fileName); FileOutputStream outStream = new FileOutputStream(file); DataOutputStream dataStream = new DataOutputStream( outStream); dataStream.writeInt( 2 ); dataStream.writeBoolean( false ); dataStream.writeDouble( 9.8 ); dataStream.flush(); dataStream.close(); } catch (IOException e) { System.out.println("ERROR: " + e); }
DataInputStream - luku try { File file = new File(fileName); FileInputStream inStream = new FileInputStream(file); DataInputStream dataStream = new DataInputStream( inStream); int i = dataStream.readInt(); boolean b = dataStream.readBoolean(); double d = dataStream.readDouble(); System.out.println("Luettu:\n" + "int i == " + i + "\n” + "boolean b == " + b + "\n" + "double d == " + d); dataStream.close(); } catch (IOException e) { System.out.println("ERROR: " + e); }
PrintWriter ja BufferedReader • PrintWriter-luokalla voidaan tallentaa tekstiä tietovirtaa apunakäyttäen tekstitiedostoon • Tekstitiedostoa voidaan lukea tietovirrasta BufferedReader-luokalla
Tekstitiedoton tallentaminen - PrintWriter try { File file = new File(fileName); FileOutputStream outStream = new FileOutputStream(file); PrintWriter printWriter = new PrintWriter(outStream); printWriter.println("Tässä yksi rivi."); printWriter.print("Tässä rivi ilman rivinvaihtoa."); printWriter.println("Tässä rivinvaihdon kanssa."); printWriter.flush(); printWriter.close(); } catch (IOException e) { System.out.println("ERROR: " + e); }
Tekstitiedoton lukeminen - BufferedReader try { File file = new File(fileName); FileInputStream inStream = new FileInputStream(file); InputStreamReader isReader = new InputStreamReader(inStream); BufferedReader buffReader = new BufferedReader(isReader); String readedLine; int lineNum = 0; while ((readedLine = buffReader.readLine()) != null) { System.out.println("Rivi " + (++lineNum) + ":" + readedLine); } buffReader.close(); } catch (IOException e) { System.out.println("ERROR: " + e); }
Olioiden tallentaminen • Java osaa tallentaa olion tilan binäärimuodossa ObjectOutputStream-luokan avulla • Mikä tahansa omatekoisen luokan olio voidaan tallentaa, kun se toteuttaa (implements) Serializable-rajapinnan (interface):public class MyClass implements Serializable { ... }
Olioiden tallentaminen – Student.java import java.io.*; public class Student implements Serializable { private int m_studentNumber; private String m_name; public Student(int studentNumber, String name) { m_studentNumber = studentNumber; m_name = name; } public String toString() { return "Student:\n Number: " + m_studentNumber + "\n" + " Name: " + m_name; } }
Olioiden tallentaminen – ObjectOutputStream try { File file = new File(fileName); FileOutputStream outStream = new FileOutputStream(file); ObjectOutputStream objStream = new ObjectOutputStream(outStream); objStream.writeObject(new Student(11, "Matti")); objStream.writeObject(new Student(34, "Tuukka")); objStream.writeObject(new Student(99, "Teppo")); objStream.flush(); objStream.close(); } catch (IOException e) { System.out.println("ERROR: " + e); }
Olioiden lukeminen – ObjectInputStream try { File file = new File(fileName); FileInputStream inStream = new FileInputStream(file); ObjectInputStream objInput = new ObjectInputStream(inStream); Student student1 = (Student) objInput.readObject(); Student student2 = (Student) objInput.readObject(); Student student3 = (Student) objInput.readObject(); System.out.println("1:" + student1 + "\n" + "2:" + student2 + "\n" + "3:" + student3); objInput.close(); } catch (IOException e) { System.out.println("ERROR: " + e); } catch (ClassNotFoundException e) { System.out.println("ClassNotFnd: " + e); }
JavaDoc ohjelmakoodin dokumentoinnin apuväline
JavaDoc • Ohjelmakoodiin voi sijoittaa kommentteja, joista JavaDoc osaa tehdä html-muotoisen dokumentaation • Dokumentaatio on ulkoasultaan ja toiminnallisuudeltaan samanlainen kuin Javan oman API:n dokumentaatio • Kommenteissa pitää käyttää ns. tageja joita JavaDoc ymmärtää
JavaDoc • Kommentti sijoitetaan ennen luokkaa, metodia tai attribuuttia:/** * Tämä luokka arpoo lottorivin */ • Kommentin sisällä voi olla @-merkillä alkavia tageja
JavaDoc-tagit • @author Tekijä • @version Versionumero • @param parametrin_nimi Kuvaus • @return Kuvaus paluuarvosta Kommenteissa voi käyttää halutessaan HTML-koodia.
JavaDoc -käyttö • HTML-dokumentaatio saadaan komennollajavadoc lähdetiedosto.java • JavaDoc:ia voi pyytää tekemään myös useasta tiedostosta dokumentaation:javadoc *.java • Komentoriviparametreilla voidaan vaikuttaa dokumentaation tyyliin • -private komentoriviparametri dokumentoi myös private ja protected-näkyvyysalueilla esitellyt metodit ja attribuutit
JavaDoc – esimerkki /** * Malliluokka, jossa esitellään JavaDoc:n toimintaa * @version 1.0 * @author Matti Meikäläinen */ public class TestApp { /** * Malli luokkamuuttujasta */ private int m_memberVariable; /** * Mallimetodi * @param name Otettava parametri * @return Merkkijono jonka metodi palauttaa */ public String testMethod(String name) { /* … */ } }
JavaDoc • Oletusarvoisesti JavaDoc dokumentoi vain public-näkyvyysalueeseen määritellyt attribuutit ja metodit • -private –komentoriviparametrilla se ottaa mukaan myös private ja protected-näkyvyysalueiden dokumentoinnin • Lisätietoa JavaDoc:sta löytyy verkosta: http://java.sun.com/j2se/javadoc/
Yhteenveto Kurssialue
Kurssialue 1/5 • Oliot ja luokat • Olioiden määrittely Java-kielessä • Attribuutit ja metodit • Näkyvyysalueet • Staattiset attribuutit / metodit • Konstruktorit • null –arvo • Metodit • Paikalliset muuttujat, metodin parametrit, luokan attribuutit • Tehtävien jako pienempiin palasiin • this-määreen käyttö • Metodien paluuarvot
Kurssialue 2/5 • Perustietotyypit • Perustietotyyppien ja olioiden erot • Määrittelyt • Sijoitukset • Vertailuoperaatiot • Kasvatusoperaatiot, vähennysoperaatiot, ... • Vakiot • Vertailulausekkeet • Ehtojen luonti ja yhdistely • Monihaaraiset if-lauseet • switch-lauseke
Kurssialue 3/5 • Muuttujat • Näkyvyysalue • Elinikä • Roskienkeruu • Tyypinmuunnokset • Toistorakenteet • Käyttö • Sopivan toistorakenteen valinta • Liikkuminen toistorakenteen sisällä
Kurssialue 4/5 • Taulukot • Luonti (yksi ja useampiulotteiset taulukot) • Läpikäynti • Kopiointi • Rajoitteet • Vector-luokka • Tiedostot • FileInputStream/FileOutputStream • DataInputStream/DataOutputStream • BufferedReader/PrintWriter • ObjectInputStream/ObjectOutputStream
Kurssialue 5/5 • Termit • + muut käsitellyt asiat • Rekursio • JavaDoc • UML-kaaviot • Valmiiden luokkien käyttö • J2SE API • Kommentit • Tulostus komentoikkunaan • Poikkeusten käsittely • Ohjelman tekoprosessi Java-kielellä