330 likes | 467 Views
Mistä ne tulevat?. Tietovirrat ja tiedostot. Kuinka niitä käsitellään. Minne ne menevät?. Tiedon koodaus it-järjestelmissä. pienin tietoyksikkö bitti kaksi tilaa: nolla (sähkövirtaa ei ole) yksi (sähkövirtaa kulkee) 8 bittiä muodostavat tavun eli merkin
E N D
Mistä ne tulevat? Tietovirrat ja tiedostot Kuinka niitä käsitellään Minne ne menevät? Anne Benson
Tiedon koodaus it-järjestelmissä • pienin tietoyksikkö bitti • kaksi tilaa: nolla (sähkövirtaa ei ole) yksi (sähkövirtaa kulkee) • 8 bittiä muodostavat tavun eli merkin • merkkijärjestelmiä on erilaisia riippuen siitä, kuinka 8 (7) bittiä on organisoitu,esimerkiksi ASCII (American Standard Code for Information Interchange) ISO Latin-1 • DOS ASCII • EBCDIC (IBM suurkoneet) Anne Benson
Tavuista tieto eli kenttä • Tavut muodostavat tiedon: • Javan alkeismuuttujat (fyysinen organisointi) • int 4 tavua • double 8 tavua • Loogisia, käyttäjän tietoja • auton rekisteritunnus (String) AAa – Nnn • vähintään kaksi kirjainta ja yksi numero • henkilötunnus ppkkvvA/+/-nnnD, Anne Benson
Kentistä tietokokonaisuuksia(tietueita) • Esimerkiksi • nide • tositteen tiedot • kuorma-auton tiedot • opiskelijan tiedot Anne Benson
Tietueista tiedostoja ja tietokantoja • Esimerkiksi • asiakkaat • tuotteet • tilaukset • opiskelijat Anne Benson
Java ja tietovirrat • -standarditietovirrat • merkkivirrat • poikkeustilanteisiin varautuminen Anne Benson
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 Anne Benson
Javan tietovirrat Fyysisiä laitteita Minne käsitelty tieto kirjoitetaan? Mistä tieto luetaan? Miten tieto käsitellään? Anne Benson
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 Anne Benson
Tiedon lukeminen näppäimistöltä • Merkkivirtaa luetaan näppäimistöltä • Määrittele tiedon lähde • BufferedReader in = new BufferedReader (new InputStreamReader(System.in)); Talletetaan merkkivirtaa , enter lopettaaVäliaikainen talletuspaikka syöttöpuskuri: BufferedReader Java.lang-pakkauksen System.in: lähettää tavuvirtaa Anne Benson
Tiedon lukeminen näppäimistöltä • Tieto lähtee tavuina näppäimistöltä -> muunnetaan matkalla syöttöpuskuriin merkkivirraksi (javan io-luokkien tehtävä) • Scannerin metodit nextInt(), nextDouble() jne muuntavat tiedon haluttuun muotoon • Jos sovelluksessa luetaan tieto ilman Scanneria, täytyy tehdä tiedon muunto Stringistä Anne Benson
Javan tietovirrat Näppäimistöltä tuleva merkkivirta Merkkivirran lukemiseen tarvitaan luokat: InputStream System.in InputStreamReader BufferedReader Anne Benson
Javan tietovirrat Näppäimistöltä tuleva merkkivirta Mihin tieto talletetaan: Puskuri varataan lukemista varten BufferedReader in = new BufferedReader (new InputStreamReader(System.in)); Missä muodossa tieto saadaan? Luetaan tavuja, koodataan merkeiksi Mistä tieto saadaan: näppäimistöltä mistä tieto hankitaan – minne tieto talletetaan Anne Benson
Javan tietovirrat • Tietovirran määrittelyssä tarvitaan seuraavat tiedot: • miten sovellus käsittelee tietoa • missä muodossa tieto luetaan/kirjoitetaan: • tavu, merkki, int, double jne • mikä on tiedon fyysinen lähde/kohde: • levy, kirjoitin, toinen sovellus jne Anne Benson
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 Anne Benson
Javan tietovirrat Tekstimuotoisen tiedoston käsittely • Kirjoitetaan tiedosto • Luetaan tiedoston sisältö ja tulostetaan näytölle • Muistetaan varautua virhetilanteisiin Anne Benson
Tekstitiedoston kirjoittaminen • Luetaan esimerkiksi näppäinsyötteenä annettavat rivit • Kirjoitetaan tiedosto • Muistetaan varautua virhetilanteisiin Anne Benson
Tekstitiedoston kirjoittaminen • Määrittele fyysinen tiedosto File • Ohjelmalle kirjoitusalueeksi • PrintWriter • 3. Kirjoitettavan tiedoston muoto FileWriter Anne Benson
Tekstitiedoston kirjoittaminen File tiedostoNimi = new File (”C:\\temp\\testi.txt”); PrintWriter kirjoitin = new PrintWriter (new FileWriter(tiedostoNimi)); Anne Benson
Tekstitiedoston kirjoittaminen • muodostetaan kirjoitettava rivialue, String rivi, joka • saa jostakin tietoa (tässä ei välitetä mistä) • niin kauan kuin tietoa riittää, kirjoitetaan tiedostoon • rivi = hankitietoa • while(rivi.length() > 0){ • tulostus.write(rivi + System.getProperty("line.separator")); • rivi =hankitietoa • } Anne Benson
Tekstitiedoston kirjoittaminen Esimerkki tekstitiedoston kirjoittamisesta löytyy esimerkistä TeksitiedostoKirjoittaja.java Anne Benson
Tekstitiedoston lukeminen Tiedoston määritys: - luokat java.io-pakkauksessa BufferedReader – määrittää ohjelmalle lukupuskurin FileReader – kertoo, että luettava tiedosto on merkkimuotoinen File – fyysinen kohde levyllä, jota käsitellään Lukeminen: String rivi; while ((rivi = luettava.readLine()) != null) System.out.println(rivi); luettava.close(); Anne Benson
Tekstitiedoston lukeminen Esimerkki tiedostomäärittelystä ja lukemisesta (ei vielä toimiva ohjelma): File tdstoNimi = new File(”c:\\testi.txt”); BufferedReader luettava = new BufferedReader(new FileReader(tdstoNimi)); String rivi;rivi = luettava.readLine(); while (rivi != null){ System.out.println(rivi); rivi = luettava.readLine() } luettava.close(); Anne Benson
Tekstitiedoston lukeminen Tekstitiedoston lukeminen täydellisenä esimerkissä: TekstitiedostoLukija.java Anne Benson
Poikkeustilanteet Entä jos levy on täynnä ja tiedostoa ei voi kirjoittaa? Tiedosto on toisentyyppinen kuin odotimme Anne Benson
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 Anne Benson
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()); } Anne Benson
Poikkeustilanteet Poikkeustilanteisiin varautuminen Kun sovelluksessa on lauseita, jotka voivat aiheuttaa poikkeustilanteen synnyn, otetaan ne käsittelyyn try – catch lauseilla. Yhteen try- lauseeseen voidaan yhdistää useita catch – lohkoja. try{ lause1; lause2; lause3; } catch(NumberFormatException nfe){ System.out.println(”Ei numeerista tietoa”); } catch (ArrayIndexOutOfBoundsException aei){ System.out.println(”Taulukkokäsittelyssä indeksointi väärin”); } catch (Exception e){ System.out.println(e.getMessage()); } Anne Benson
Poikkeustilanteet Poikkeustilanteisiin varautuminen • Huomaa: • tarkat poikkeusilmoitukset laitetaan välittömästi try – lohkon jälkeen • yleinen Exception tulee aina viimeiseksi • loppuun voidaan lisätä finally – lohko, joka suoritetaan aina, • oli aiempi suoritus tapahtunut try tai joistakin catch - lohkoista Anne Benson
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 Anne Benson
Poikkeustilanteet Poikkeustilanteisiin varautuminen Heittomekanismi: Luokka1 throws Luokka2 throws try{} catch {} Luokka3 Anne Benson
Lukeminen ja kirjoittaminen • Tärkeitä pakkauksia ja luokkia • java.io.* • sisältää tietovirtojen käsittelyn rajapinnat, luokat ja poikkeukset • java.util • StringTokenizer • java.lang.StringBuffer • merkkijonon käsittely dynaamisesti Anne Benson
Lukeminen ja kirjoittaminen Näppäimistövirran ja tekstitiedoston käsittelyn esimerkit löytyvät osion 4 viikon kolme materiaalista Anne Benson