Tietovirrat ja tiedostot
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 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
Tiedon koodaus it-järjestelmissä
Internetissä ei 8-bittinen järjestelmä riitä.Syy: kaikkialla maailmassa toimiva järjestelmä, lukemattomia kansallisia merkistöjäInternetin myötä käyttöön UNICODE, kahteen tavuun eli 16 bittiin perustuva järjestelmä (kehitys alkoi aiemmin 80-luvulla)UTF-8 käytetyimpiä
Lisää tietoa esimerkiksi mainioista linkeistä
- http://www.saunalahti.fi/wpoet/fin/char.html
- http://fi.wikipedia.org/wiki/Merkist%C3%B6standardi
(huomaa ”rikkoutuneet ö ja väliviiva)
Anne Benson
Tavuista tieto eli kenttä
Tavut muodostavat tiedon:
Javan alkeismuuttujat (fyysinen organisointi)– int 4 tavua– double 8 tavua
pituus aina 11 merkkiä
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
Java ja tietovirrat
-standarditietovirrat
-merkkivirrat
-poikkeustilanteisiin varautuminen
Tietovirrat IPO InputProcessOutput
SyöttöInput
TulostusOutput
KäsittelyProcess
Tietovarastot
•näppäimistö•viivakoodi•toinen prosessi•verkon yli•tiedosto•tietokanta•jne
•näyttö•kirjoitin•toinen prosessi•verkkoon•tiedosto•tietokanta•jne
Javan tietovirrat Fyysisiä laitteita
Mistä tieto luetaan?
Miten tieto käsitellään?
Minne käsitelty tieto kirjoitetaan?
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
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
Merkkivirtaa luetaan näppäimistöltä
1. Määrittele tiedon lähde
BufferedReader in = new BufferedReader (new InputStreamReader());
Java.lang-pakkauksen System.in: lähettää tavuvirtaa
Talletetaan merkkivirtaa , enter lopettaa
Väliaikainen talletuspaikka syöttöpuskuri: BufferedReader
Tiedon lukeminen näppäimistöltä
Javan tietovirrat Näppäimistöltä tuleva merkkivirta
BufferedReader
InputStreamReader
InputStream
System.in
Javan tietovirrat Näppäimistöltä tuleva merkkivirta
BufferedReader in = new BufferedReader (new InputStreamReader(System.in));
Mihin tieto talletetaan:
Puskuri varataan lukemista varten
Mistä tieto saadaan: näppäimistöltä
mistä tieto hankitaan – minne tieto talletetaan
Missä muodossa tietosaadaan?Luetaan tavuja, koodataan merkeiksi
Javan tietovirrat
Tietovirran määrittely
• miten sovellus käsittelee tietoa
• missä muodossa tieto luetaan/kirjoitetaan
• mikä on tiedon fyysinen lähde/kohde
Javan tietovirrat Näppäimistövirran lukeminen
Näppäimistö:
BufferedReader syotto = new BufferedReader (new InputStreamReader(System.in));
Lukeminen:vastaus = syotto.readLine();
Javan tietovirrat Tulostaminen näytölle
Tulostaminen näytölle
1. System.out.print – kirjoittaa riville, kirjoituksen jatkokohta jää samalle riville
2. 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
1. Kirjoitetaan tiedosto
2. Luetaan tiedoston sisältö ja tulostetaan näytölle
Muistetaan varautua virhetilanteisiin
Tekstitiedoston lukeminen
Tiedoston määrittäminen:
BufferedReader luettava = new BufferedReader(new FileReader(tdstoNimi));
Lukeminen:
String rivi;while ((rivi = luettava.readLine()) != null)
System.out.println(rivi);luettava.close();
Poikkeustilanteet
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
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());}
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
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
Luokka2
Luokka3
throws
throws
try{}
catch {}
Lukeminen ja kirjoittaminen
Tärkeitä pakkauksia ja luokkia
1. java.io.*
sisältää tietovirtojen käsittelyn rajapinnat, luokat ja poikkeukset
2 java.util
StringTokenizer
3. java.lang.StringBuffer
merkkijonon käsittely dynaamisesti
Lukeminen ja kirjoittaminen
Näppäimistövirran ja tekstitiedoston käsittelyn esimerkit löytyvät
osion 4 viikon yksi materiaalista