Tiedostojen käsittely Tiedoston luku ja tallennus Poikkeusten käsittely Oliot tiedostoissa
Tiedostot Tiedostojen käyttöä tarvitaan kun halutaan esimerkiksi säilyttää tietoa eri ohjelman ajokertojen välillä Rekisterit Asetustiedostot Tulosteet
Tiedostot Tiedostoja käsitellään Javassa tietovirtojen kautta Vastaavia tietovirtoja käytetään Javassa komentoikkunaan tulostukseen ja verkon yli tapahtuvaan tiedonvälitykseen
File-luokka File +File(String) +boolean canRead() +boolean canWrite() +boolean exists() +String getAbsolutePath() +boolean isFile() +boolean isDirectory() +boolean length() +boolean createNewFile() +boolean delete() +boolean mkdir() ... Javan File-luokka sisältää yksittäisen tiedoston tai hakemiston käsittelyyn liittyviä toimintoja File-luokka löytyy java.io-paketista (import java.io.File)
File-luokka – esimerkki import java.io.File; ... File file = new File(”phonebook.txt”); if (!file.exists()) { if (file.createNewFile()) System.out.println(”File created succesfully.”); else System.out.println(”Couldn’t create file.”); } else { System.out.println(”File phonebook.txt already exists.”); Esimerkki vaatii toimiakseen poikkeusten käsittelyn.
Poikkeukset Tiedostojen käsittelyssä voi tapahtua monentyyppisiä virheitä Oikeudet järjestelmässä Levytila Tiedostojen olemassaolo Virheiden helppoa hallinnointia varten on Java-kielessä käytössä poikkeukset
Poikkeukset Poikkeukset ovat olioita, joita ohjelmakoodista voidaan heittää (throw) Poikkeukset on otettava kiinni koodissa (catch) Poikkeuksia sisältävän koodin suoritus tehdään try-catch -lohkossa
Poikkeukset tiedostojen käsittelyssä Tiedostojen käsittelyssä File-luokka voi heittää IOException-tyyppisen poikkeuksen (löytyy java.io.IOException-paketista) Kääntäjä ei käännä koodia ellei poikkeuksia ole otettu kiinni
Poikkeusten käsittely import java.io.*; ... try { // Poikkeuksia mahdollisesti aiheuttava koodi tähän } catch (IOException e) { // Poikkeuksen käsittely
Poikkeusten käsittely Javan API-luokkien metodien heittämät poikkeukset on kuvattu Javan API-dokumentaatiossa Poikkeusten kiinniotto kuuluu kurssin sisältöön, mutta niiden heittäminen ei (OH2 keväällä)
Tietovirrat ja niiden suunnat Output stream Koodi Tiedosto Koodi Tiedosto Input stream Tietovirralla on aina suunta Tiedostoon tallentaessa käytetään OutputStream-luokasta perittyjä luokkia Tiedostosta luettaessa käytetään InputStream-luokasta perittyjä luokkia
OutputStream ja InputStream OutputStream (abstrakti) FileOutputStream Tallennus tavuina ObjectOutputStream Olioiden tallennus FilterOutputStream (abstrakti) DataOutputStream Perustietotyyppien tallennus InputStream (abstrakti) FileInputStream Ylläolevilla luokilla tallennetun tiedon lukemiseen käytettävät luokat ObjectInputStream FilterInputStream (abstrakti) DataInputStream
Tietovirtojen käyttö Tiedostoon tallennus Tiedoston luku 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);