Kuinka niitä käsitellään Mistä ne tulevat? Java ja tietovirrat Kuinka niitä käsitellään Minne ne menevät?
Java ja tietovirrat Tänään aiheenamme standarditietovirrat merkkivirrat poikkeustilanteisiin varautuminen Ensi maanantaina oliovirrat binäärivirtojen esittely
Tietovirrat IPO InputProcessOutput Käsittely Process Syöttö Input Tulostus Output näppäimistö viivakoodi toinen prosessi verkon yli tiedosto tietokanta jne näyttö kirjoitin toinen prosessi verkkoon tiedosto tietokanta jne Tietovarastot
Javan tietovirrat Fyysisiä laitteita Minne käsitelty tieto kirjoitetaan? Mistä tieto luetaan? Miten tieto käsitellään?
Javan tietovirrat : java.io – pakkaus Tiedon kaksi esitystapaa Pienin tiedon talletusyksikkö Tavu, muodostuu kahdeksasta bitistä: mikä tahansa tieto InputStream OutputStream Merkki, muodostuu kahdesta tavusta (16 bittiä): tekstimuotoinen tieto Reader Writer
Tiedon lukeminen näppäimistöltä Merkkivirtaa luetaan näppäimistöltä Määrittele tiedon lähde BufferedReader in = new BufferedReader (new InputStreamReader()); Talletetaan merkkivirtaa , enter lopettaa Väliaikainen talletuspaikka syöttöpuskuri: BufferedReader Java.lang-pakkauksen System.in: lähettää tavuvirtaa
Javan tietovirrat Näppäimistöltä tuleva merkkivirta System.in InputStream InputStreamReader BufferedReader
Javan tietovirrat Näppäimistöltä tuleva merkkivirta Mihin tieto talletetaan: Puskuri varataan lukemista varten BufferedReader in = new BufferedReader (new InputStreamReader(System.in)); Mistä tieto saadaan: näppäimistöltä Missä muodossa tieto saadaan? Luetaan tavuja, koodataan merkeiksi mistä tieto hankitaan – minne tieto talletetaan
Javan tietovirrat Näppäimistövirran lukeminen import java.io.*; /* Tässä esitellään, kuinka System.in -tietovirta luetaan sovellukseen.System.in määrittelee tiedon lähteeksi työaseman näppäimistön */ class LueNappaimisto{ public static void main (String [] args){ String rivi; BufferedReader nappainsyote = new BufferedReader(new InputStreamReader(System.in)); //seuraavassa luetaan syötteitä //lukeminen VAATII varautumisen poikkeustilanteeseen try{ System.out.println("Anna tekstiä, pelkkä enter lopettaa: "); rivi = nappainsyote.readLine();
Javan tietovirrat Näppäimistövirran lukeminen while(rivi.length() > 0){ System.out.println("Annoit:" + rivi); System.out.println("Anna tekstiä, pelkkä enter ” + lopettaa: "); rivi = nappainsyote.readLine(); } System.out.println("Loppu"); } catch (IOException ioe) { System.out.println(ioe.getMessage()); } }//main }//class
Javan tietovirrat Tulostaminen näytölle System.out.print – kirjoittaa riville, kirjoituksen jatkokohta jää samalle riville System.out.println - aloittaa kirjoituksen uudelta riviltä Huomaa: System.out ja System.in ovat System-luokan attribuutteja. Ne määrittelevät aina työasemakohtaisen standardisyöttö- ja tulostusvirran. Eli ”System” on työasema, järjestelmä jossa sovellus tällä hetkellä toimii Näppäimistöltä lukeminen:
Javan tietovirrat Tekstimuotoisen tiedoston käsittely Kirjoitetaan tiedosto Luetaan tiedoston sisältö ja tulostetaan näytölle Muistetaan varautua virhetilanteisiin
Tekstitiedoston lukeminen import java.io.*; public class LueTeksti { public static void main ( String[] args ){ try{ File testiTiedosto = new File("esim1.txt"); System.out.println( "Tiedoston sisältö: " + getRivit(testiTiedosto)); } catch (FileNotFoundException fnf){ System.out.println("Tiedostoa ei löytynyt "); } catch (IOException ioe){ System.out.println("IO-virhe: " + ioe.getMessage()); } }
Tekstitiedoston lukeminen public static String getRivit(File tiedosto)throws FileNotFoundException, IOException { BufferedReader luku = null; String rivit = ""; String rivi = null; try { luku = new BufferedReader(new FileReader(tiedosto)); while (( rivi = luku.readLine()) != null){ rivit = rivit + rivi + System.getProperty("line.separator"); } } catch (FileNotFoundException ex) { ex.printStackTrace(); rivit = null; } return rivit; } }
Tiedosto on toisentyyppinen kuin odotimme Poikkeustilanteet Entä jos levy on täynnä ja tiedostoa ei voi kirjoittaa? Tiedosto on toisentyyppinen kuin odotimme
Poikkeustilanteisiin varautuminen Poikkeustilanteet Poikkeustilanteisiin varautuminen java.io – pakkauksen poikkeustilanteet, Exceptions, on suunniteltu I/O-poikkeusten käsittelyyn: FileNotFoundException : tiedostoa ei löydy IOException: ”yleinen” io-poikkeus EOFException: tiedoston loppu - poikkeus
Poikkeustilanteisiin varautuminen Poikkeustilanteet Poikkeustilanteisiin varautuminen Käytetään poikkeuksen kiinniottoa Lause/lauseet jotka voivat aiheuttaa poikkeuksen, laitetaan try-lohkoon. Poikkeustilanteen selvittely laitetaan catch lohkoon: try { lause1; lause2; } catch (Exception poikkeusolio) System.out.println(poikkeusolio.getMessage());
Poikkeustilanteisiin varautuminen Poikkeustilanteet Poikkeustilanteisiin varautuminen Käytetään poikkeuksen ”heittoa” edelleen metodia kutsuneeseen luokkaan: public static String getRivit(File tiedosto)throws FileNotFoundException, IOException Nyt kutsuvassa luokassa pitää olla try-catch –lohko
Poikkeustilanteisiin varautuminen Poikkeustilanteet Poikkeustilanteisiin varautuminen Heittomekanismi: Luokka1 throws Luokka2 throws try{} catch {} Luokka3
Lukeminen ja kirjoittaminen Tärkeitä pakkauksia ja luokkia 1. java.io.*; java.util StringTokenizer 3. java.lang.StringBuffer
HUOMAA ESIMERKIT Osion 4 viikkoon 1 löytyy tämän luennon esimerkkimateriaalit kohdasta ”Esimerkkejä viikolle 1” Kannattaa tutkia