200 likes | 308 Views
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.
E N D
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 InputStreamOutputStream • 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 poikkeustianteeseen 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 • 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
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; } }
Poikkeustilanteet Entä jos levy on täynnä ja tiedostoa ei voi kirjoittaa? Tiedosto on toisentyyppinen kuin odotimme
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
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()); }
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
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