Bevezetés a Java programozásba Multimédiafejlesztő tanfolyam 3. foglalkozás Készítette: Csekéné Molnár Erika, 2009
1. Input/output kezelés Kivételkezelés Adatbeolvasása parancssorból Stream (csatorna) Adatbeolvasás konzolról Feladatok
1.1 Kivételkezelés Lényege: A programban fellépő futásidejű hibák, vagy a program normál logikájához képest különleges, attól eltérő helyzetek kezelése. Eszköze: A try blokkban kiváltott kivételeket az utána következő catch blokk, vagy blokkok kezelik le: try { utasítások; } catch(Típus változó) { utasítások; } (A catch ágban a "paraméterként" megadott típus határozza meg, hogy mely kivételeket képes lekezelni.)
1.2 Adatbeolvasás parancssorból Egész szám beolvasása (Negyzet.java) try{ szam = Integer.parseInt(args[0]); }catch (NumberFormatException e){ System.out.println("Egész számot adj meg!"); } String args[ ]: a parancssorban megadott paraméterek, String típusú tömbben tárolva Integer.parseInt(p): a paraméterként megadott String típusú adatot int típusúvá alakítja NumberFormatExeption: nem megfelelő típusú (int) paraméter megadása esetén fellépő hiba Futtatáskor: java Negyzet 4 Feladat: Írj programot, amely két parancssorból megadott egész számot ad össze! (Osszead.java )
1.3 Stream (csatorna) Definíció: A csatorna adatok sorozata, egyik végén befelé, a másik végén kifelé "folynak" az adatok. Megvalósítás: csatornákat is osztályokkal valósítjuk meg, azaz minden csatorna-típusnak egy-egy osztály felel meg, amelyek a java.io csomagban találhatók. Típusai: Csatornán folyó adatok iránya szerint: bemeneti (pl.: billentyűzet, fájl… stb.) és kimeneti (pl.: képernyő, fájl… stb.) csatornák. Csatornán folyó adatok típusa szerint: bájt- és karaktercsatorna Alapcsatorna osztályok: Típus\Irány Bemeneti Kimeneti Bájt InputStream OutputStream Karakter Reader Writer
1.4 Adatbeolvasás konzolról Importálás: A program első sorába importálni kell a java.io csomagot. import java.io.*; Csatorna létrehozása és megnyitása: egy reader nevű objektum létrehozása, amely hozzá van rendelve a standard inputhoz, ahol pufferelt adatbeolvasást hajtunk végre. BufferedReader reader = new BufferedReader(new InputStreamReader (System.in)); Adatbeolvasás kivételkezeléssel: a reader objektum readLine() eljárása olvas be egy String típusú értéket, amit egész számmá kell alakítani. try { sor = reader.readLine(); szam = Integer.parseInt(sor); }catch(IOException e){ } Feladat.: A beolvasatott számnak írjuk ki a négyzetét! (Negyzetszam.java)
1.5 Feladatok Írj programot, amely parancssorból megadott 3 szám közül eldönti, melyik a legkisebb ill. legnagyobb! Használd a Math osztály min és max függvényét és használj saját statikus függvényeket! (MinMax.java) Írj programot, amely bekér a felhasználótól öt egész számot és növekvő sorrendbe kiírja! Használj tömböt a számok tárolásához és készíts statikus metódusokat! (Rendez.java)
2. Állománykezelés Fájlokról általában Bináris fájlok Karakteres fájlok Szöveges fájlok Szöveges fájl feldolgozása StringTokenizer osztály
2.1 Fájlokról általában Az állomány is stream (csatorna): bemeneti és kimeneti adatforrás is lehet fájl. Kell a java.io csomag, importálni kell a program elején Állomány típusok: Bináris file: 8 bites egységenként történik a feldolgozás, szám típusú adatokat tartalmaz Karakteres file: 16 bites egységenként, azaz karakterenként történik a feldolgozás Szöveges file: részenként (pl. soronként, szavanként) történik a feldolgozás Műveletek: File megnyitása: csatorna létrehozása és megnyitása egy lépésben a new utasítás segítségével Műveletek: olvasás: read(), readLine(), írás: write(), print(), println() File lezárása: close()
2.2 Bináris fájlok Bemenethez használjuk a FileInputStream osztályt. FileInputStream bemenet =new FileInputStrem(„feldolgozando.txt”); … int szam = bemenet.read(); bemenet.close(); Olvasás vége, ha file vége -1. Kimenethez használjuk a FileOutputStream osztályt. FileOutputStream kimenet=new FileOutputStream(„irasra.txt”); kimenet.write(i); kimenet.close(); Feladat: Írj programot, amely megnyitja olvasásra a szamok.txt állományt, kiírja tartalmának kódjait az outputra, majd feltölti az üres cel.txt fájt 1-től 150-ig kódolt karakterekkel! (Binaris.java)
2.3 Karakteres fájlok Bemenethez használjuk a FileReader osztályt. FileReader bemenet =new FileReader(„feldolgozando.txt”); … int c = bemenet.read(); bemenet.close(); Olvasás vége, ha file vége -1. Kimenethez használjuk a FileWriter osztályt. FileWriter kimenet=new FileWriter(„irasra.txt”); kimenet.write(c); kimenet.close(); Feladat: Írj programot, amely a forras.txt fájl tartalmát átmásolja a cel.txt fájlba! (Karakteres.java)
2.4 Szöveges fájlok Osztályok: Részenkénti feldolgozás: praktikus, ha egy file tartalmát nem csak karakterenként vagy byte-onként érhetjük el, hanem egy nagyobb szakaszt egyben is. Pufferelt olvasás lényege, hogy a stream egy szakaszát egy pufferbe olvassa. A puffer tartalma egy művelettel elérhető. Beolvasás soronként a "\n" jelig. Fájl vége: null. Osztályok: bemenethez: BufferedReader, ami képes egy sort egy művelettel beolvasni, pufferbe olvas, tartalma egy művelettel elérhető. kimenethez: PrintWriter, ami a kiírandó adatot karakterenként írja a kimeneti streambe.
2.5 Szöveges fájl feldolgozása Beolvasás: BufferedReader bemenet = new BufferedReader(new FileReader(„bemenet.txt”)); … String sor = bemenet.readLine(); … bemenet.close(); Kiírás: PrintWriter kimenet = new PrintWriter( new FileWriter(„kimenet.txt”)); … kimenet.println(„Serteperte, felseperte”); … kimenet.close(); Feladat: Írj programot, amely a torp.txt fájl sorait megsorszámozva átírja a cel.txt fájlba! (Szoveges.java)
2.6 StringTokenizer osztály String részekre bontását teszi lehetővé Importálni kell a java.util csomagot Feldarabolt szöveg létrehozása, ahol megadható az elválasztó karakter: StringTokenizer st = new StringTokenizer(String szöveg, String elválasztókarakter); Alapértelmezés a szóköz és a fehérszóközök (például: \t\n\r\f ) Metódusai: st.hasMoreTokens() Igazat ad vissza ha van még rész st.nextToken() A következő tokent adja vissza értékül st.countTokens() Visszadja a hátralévő részek számát
2.7 Feladat Írj programot, amely beolvassa a torp.txt fájlt, amelyben soronként egy törp neve és számértékek vannak, szóközzel elválasztva. Hozzunk létre egy torpok.txt állományt, amelyben kiírjuk a törp nevét és a hozzá tartozó számok összegét! (Torpok.java)