Java tutorial. Be- es kimenet kezelese. A legelsoprogram. Hogyan hasznaljunk fajlokat? Bemenet es kimenet absztrakciüja

Hasonló dokumentumok
Be- és kimenet kezelése

Java programozási nyelv 10. rész Input/output kezelés

JAVA ALKALMAZÁSOK 5. ELŐADÁS 1/9/2017 1

Programozási nyelvek Java

Reader /Writer InputStreamReader, OutputStreamWriter

Java programozási nyelv

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Az új be- és kimenet könyvtár

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Debreceni Egyetem Informatika Kar. Mobiltelefon programozás és mobil adatbázis-kezelés

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Segédanyag: Java alkalmazások gyakorlat

Programozási technológia

Osztályszintű elérés, kivételkezelés, fájlkezelés

Programozási nyelvek II.: JAVA

TCP/IP kapcsolat Java nyelven

Java gyakorlat feladatai e s megolda sai ( )

Példaprogramok Android alá (Lista, mentés, visszatöltés, pattogó android figura) Android alapok. Android játékfejlesztés.

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Abstract osztályok és interface-ek. 7-dik gyakorlat

Programozási nyelvek Java

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

13. Állományok, bejegyzések 14. Folyamok 15. Közvetlen hozzáférésű állomány. Programozási technológia (Java) - III. / 1

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós május 6. Széchenyi István Egyetem, Gy r

Java Programozás 9. Ea: Java fájlkezelés. Sztrímtan

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Programozás I. Első ZH segédlet

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

OOP: Java 8.Gy: Abstract osztályok, interfészek

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Szoftvertechnológia alapjai Java előadások

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Magas szintű programozási nyelvek 2 Előadás jegyzet

Programozási nyelvek II.: JAVA

Objektumorientált programozás C# nyelven III.

JAVA PROGRAMOZÁS 7.ELŐADÁS

Programozás I. 8. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Pénzügyi algoritmusok

Objektumorientált programozás C# nyelven

JAVA PROGRAMOZÁS 8.ELŐADÁS

A WEB programozása - JSP1 dr.gál Tibor őszi félév

Adatszerkezetek és algoritmusok

Országzászlók (2015. május 27., Sz14)

Java és web programozás

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

S z á m í t ó g é p e s a l a p i s m e r e t e k

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Bevezetés a programozásba I.

Programozási nyelvek Java

1. Alapok. Programozás II

Programozás II. labor

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Segédanyag: Java alkalmazások gyakorlat

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Objektumorientált programozás C# nyelven

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

Java IX. telkezelés a Java-ban

Java programozási nyelv 5. rész Osztályok III.

Felhasználó által definiált adattípus

OOP: Java 4.Gy: Java osztályok

Java IX. telkezelés a Java-ban

Java tutorial. Csomagok. A program tagolasa. Alrendszerek kialakıtasa. Csomag. Alrendszerek kialakıtasa

OOP: Java 8.Gy: Gyakorlás

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Python tanfolyam Python bevezető I. rész

Programozás II. 2. Dr. Iványi Péter

Bánsághi Anna 2014 Bánsághi Anna 1 of 35

Java és web programozás

7. K: JAVA alapok Konzultáció

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Java programozási nyelv 6. rész Java a gyakorlatban


Fájlkezelés. Szöveges fájlok kezelése

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Objektumorientált programozás C# nyelven

Osztályok. 4. gyakorlat

Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1

RMI = Remote Method Invocation. Java tutorial. Kliens-szerver forgato kő nyv. Elosztott objektumok rendszere forgato kő nyv.

Java programozási nyelv 4. rész Osztályok II.

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Programozás C++ -ban 2007/1

ELTE SAP Excellence Center Oktatóanyag 1

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

Programozási nyelvek II.: JAVA, 4. gyakorlat

BME MOGI Gépészeti informatika 13.

Smalltalk 2. Készítette: Szabó Éva

JAVA PROGRAMOZÁS 3.ELŐADÁS

Java Programozás 11. Ea: MVC modell

Programozási nyelvek Java

Átírás:

Be- es kimenet kezelese A legelsoprogram Ü U dví zloszí veg kiıra sa a kepernyore public static void main( String args[] ){ System.out.println("Hello World!"); Hogyan hasznaljunk fajlokat? Ü Trivialis megoldas: a szabvanyos bemenet/kimenet a tira nyıta sa val Ü Az operaciüs rendszer szolgaltatasa Ü Az udví zloszí veget ki akarjuk ırni a hello.txt nev fajlba: java Hello >hello.txt Ha egy programban tí bb fajl van Ü Akkor a programon belulrol is kellene tudni hasznalni oket Ü Van egy specialis kí nyvtar erre a celra: a java.io csomag Ü Nem csak fajlok kezelese, hanem altalaban bemenet es kimenet Bemenet es kimenet absztrakciüja Ü Bemenet: konzol, fajl, halüzati kapcsolat, adatbazis egy rekordja, stb. adatokat lehet egymas utan olvasni rüla Ü Kimenet: kepernyo, fajl, nyomtatü, halüzati kapcsolat, adatbazis egy rekordja, stb. adatokat lehet egymas utan kiırni ra Ü Szekvencialis input/output fajl Ü Csatorna (Stream) Ü Csatornaobjektumok 1

Mire kell ez? Ü Ugyanazokat a m veleteket lehet hasznalni Ü Egy jül megszervezett kí nyvtar: java.io Ü Celok: Ö egyszer seg Ö rugalmassag Ö kifejezoero Ismet az a legelsoprogram Ü U dví zloszí veg kiıra sa a kepernyore Ugyanaz fajlba: Ü U dví zloszí veg kiıra sa egy fajlba public static void main( String args[] ){ System.out.println("Hello World!"); public static void main( String args[] ){ System.out.println("Hello World!"); Ugyanaz fajlba: Ü U dví zloszí veg kiıra sa egy fajlba Ugyanaz fajlba: Ü U dví zloszí veg kiıra sa egy fajlba public static void main( String args[] ){ FileWriter fw = new FileWriter("a.txt"); System.out.println("Hello World!"); public static void main( String args[] ){ FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); System.out.println("Hello World!"); 2

Ugyanaz fajlba: Ü U dví zloszí veg kiıra sa egy fajlba Ugyanaz fajlba: Ü U dví zloszí veg kiıra sa egy fajlba public static void main( String args[] ){ FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); System.out.println("Hello World!"); public static void main( String args[] ){ FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); pw.println("hello World!"); Ugyanaz fajlba: Ü U dví zloszí veg kiıra sa egy fajlba public static void main( String args[] ){ FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); pw.println("hello World!"); pw.close(); Ugyanaz fajlba: Ü U dví zloszí veg kiıra sa egy fajlba import java.io.*; public static void main( String args[] ){ FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); pw.println("hello World!"); pw.close(); Ugyanaz fajlba: Ü U dví zloszí veg kiıra sa egy fajlba import java.io.*; public static void main( String args[] ) FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); pw.println("hello World!"); pw.close(); 3

Ugyanaz fajlba: Ü U dví zloszí veg kiıra sa egy fajlba import java.io.*; public static void main( String args[] ) FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); pw.println("hello World!"); pw.close(); Ugyanaz fajlba: Ü U dví zloszí veg kiıra sa egy fajlba import java.io.*; public static void main( String args[] ) FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); pw.println("hello World!"); pw.close(); System.out Ü Ez egy predefinit csatorna Ü Szabvanyos kimenet Ü PrintStream Ö van neki println() m velete Ö olyasmi, mint a PrintWriter Ü Van meg System.in es System.err is System.out.println("Hello"); A java.io csomag tartalma Ü Sok pici osztaly Ü Mindegyik egy kis funkcionalitast valüsıt meg Ü Kí nnyen komponalhatük Ü Van nehany nagyon fontos osztaly, a tí bbi mar haladüknak valü... :-) Az osztalyok rendszerezese Ü Kulí nbí zoszempontok szerint csoportosıthatjuk az osztalyokat Ü Szimmetria Ü Az osztalyok neve sokat elarul Ö A nevek nevkomponensekbol epulnek fel, amelyek segıtik az osztaly hovatartozasanak megallapıtasat Ü Az osztalyok hierarchiaja is kí veti a logikai tagola st 4

Az osztalyok csoportosıtasa Ü Harom szempont szerint lehet 1. ira ny Ü bemenet Ü kimenet 2. funkciü Ü tarolas müdjanak specifikalasa Ü extra funkcionalitas hozzaadasa 3. szervezes Ü bajt Ü karakter 1. A csatornak iranya Ü Lehet bemeneti es kimeneti Ü Bemeneti: amirol olvasni lehet InputStream, Reader Ü Kimeneti: amire ırni lehet OutputStream, Writer Ü Szimmetria: pelda ul FileInputStream, FileReader, FileOutputStream, FileWriter 2. A csatornaosztalyok funkciüja 2a. A ta rola s müdja nak specifika la sa Ö hol vannak az adatok Ö pl. FileWriter (fajlban) 2b. Extra funkcionalitas hozzaadasa Ö hogyan szeretnenk piszkalni az adatokat Ö pl. PrintWriter (println() metüdussal) 2a. A ta rola s müdja nak specifika la sa Ü Honnan olvassuk az adatokat, vagy hova ırjuk azokat Ü FileReader, CharArrayReader, StringReader, PipedReader Ü C-ben: scanf, fscanf, sscanf Ü Szabvanyos m veletek minimalis funkcionalitast biztosıtanak 2b. Extra funkcionalitas hozzaadasa Ü Bonyolultabb m veletek kulí n osztalyban Ü O nmagukban egyszer ek Ü Komponalhatük Ü Szu rok Ü Peldaul a PrintWriter, BufferedReader, stb. 5

3. Az adatok szervezese Ü Ba jtszervezes Ö A kulí nbí zokarakterküdolasi szabvanyok figyelmen kıvul hagyasa Ö Input- vagy OutputStream Ü Karakterszervezes Ö A kulí nbí zokarakterküdolasi szabvanyokbül szarmazü elteresek kezelese Ö Reader vagy Writer 3. Az adatok szervezese Ü A karakterküdolasi szabvanyok: Ö ASCII (7 bit) Ö extended ASCII, EBCDIC, ISO Latin-1, ISO Latin-2, Windows Latin-*, Mac, IBM, stb. (1 bajt) Ö Java: Unicode (2 bajt) Ü Hordozhatüsag, i18n, elosztott alkalmazasok: a szabvanyok explicit kezelese Ü Java 1.1-tol Ü Sok regi osztaly/m velet elavult (deprecated) Karakterszervezes csatornak Ü Javaban a karakterek (char, String) ket ba jtosak Ü Az operaciüs rendszerek es a nem Java alkalmazasok tí bbsegeben csak egy bajtosak (pl. szí vegfajlok) Ü Hogyan lehet a lekepezest megadni a ketto kí zí tt? Ö Karakterküdolasi szabvanyok Csatornaoszta lyok Ü A csatornaosztalyok hierarchiaja es elnevezese kí veti a rendszert Ü Kí nnyen kitalalhatü, hogy melyik osztaly mire valü Ü Negy bazisosztaly, es a tí bbi ezeknek a lesza rmazottja A negy bazisosztaly Ü InputStream Ö bemeneti ba jtcsatorna Ü OutputStream Ö kimeneti bajtcsatorna Ü Reader Ö bemeneti karaktercsatorna Ü Writer Ö kimeneti karaktercsatorna 6

Lesza rmazottak Ü A nev tukrí zi, hogy melyikbol Ü Szimmetria Ü FileInputStream, FileOutputStream, FileReader, FileWriter Ü BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter Ü ByteArrayInputStream, ByteArrayOutputStream, CharArrayReader, CharArrayWriter Alapfunkcionalita s Ü A negy bazisosztalyban van specifikalva Ü Ez a negy osztaly absztrakt Ü A leszarmazottak valüsıtjak meg a funkcionalita st Ü Pl. a FileInputStream egy olyan InputStream, ami az alap csatornafunkcionalitast fajlokon valüsıtja meg Bemeneti csatornak Ü Csatorna megnyitasa Ü Csatorna leza ra sa Ü Olvasas a csatornarül Ü Csatornan talalhatü adatok mennyisegenek lekerdezese Ü Kí nyvjelzomechanizmus Kimeneti csatornak Ü Csatorna megnyitasa Ü Csatorna leza ra sa Ü Iras a csatornara Ü Buffer urıtese (flush-olas) Csatorna k megnyita sa Ü A megfeleloosztalyő csatorna objektum letrehoza sa val Ü Ezen az objektumon vegezhetok el a tovabbi csatornam veletek FileInputStream fin = new FileInputStream("a.txt"); InputStream fin = new FileInputStream("a.txt"); 7

Csatorna k beza ra sa Ü A close() m velet segıtsegevel Ü Ne felejtsuk el! Foleg kimenet csatornaknal fontos: magaban foglalja a bufferelt adatok tenyleges kiırasat (flush) is. fin.close(); Pelda import java.io.*; class IOProba { public static void main( String args[] ) InputStream fin = new FileInputStream("a.txt"); OutputStream fout = new FileOutputStream("b.txt"); /* itt most csinalhatnek valamit... */ fin.close(); fout.close(); Beolvasa s Ü read() m veletek segıtsegevel Ü Majdnem ugyanaz InputStream-ek es Reader-ek eseten Ü haromfajta read() m velet read()-ek: InputStream Ü Egy adat beolvasasa int read() throws IOException Ö egy bajtot beolvas; -1, ha vege Ü Egy tí mbnyi adat beolvasasa int read( byte[] b ) throws IOException Ö olvas b-be; visszaadja a beolvasott bajtok szamat Ü Egy resztí mbnyi adat beolvasasa int read( byte[] b, int off, int len ) throws IOException Ö off-tül len hosszan olvas read()-ek: Reader int read() throws IOException int read( char[] c ) throws IOException int read( char[] c, int off, int len ) throws IOException int read() throws IOException int read( byte[] b ) throws IOException int read( byte[] b, int off, int len ) throws IOException Ü Ugyanaz, csak byte[] helyett char[] 8

Kiıra s Ü write() m veletek segıtsegevel Ü Majdnem ugyanaz OutputStream-ek es Writer-ek eseten Ü Szimmetrikus a beolvasü read() m veletekkel Ü haromfajta alap write() m velet Ö plussz meg egy kis kiegeszıtes write()-ok: OutputStream Ü Egy adat kiırasa void write( int i ) throws IOException Ö az i-nek a legalsü bajtjat ırja ki int read() throws IOException Ü Egy tí mbnyi adat kiırasa void write( byte[] b ) throws IOException int read( byte[] b ) throws IOException Ü Egy resztí mbnyi adat kiırasa void write( byte[] b, int off, int len ) throws IOException int read( byte[] b, int off, int len ) throws IOException write()-ok: Writer void write( int i ) throws IOException void write( char[] c ) throws IOException void write( char[] c, int off, int len ) throws IOException write()-ok: Writer write()-ok: Writer void write( int i ) throws IOException Ö az i legalsü ket bajtjat ırja ki void write( char[] c ) throws IOException void write( char[] c, int off, int len ) throws IOException void write( int i ) throws IOException void write( char[] c ) throws IOException void write( char[] c, int off, int len ) throws IOException void write( String s ) throws IOException void write( String s, int off, int len ) throws IOException 9

Pelda: ma sola s static void masol ( InputStream in, OutputStream out ) int b; while( (b=in.read())!= -1 ) out.write(b); out.flush(); O sszerakva: import java.io.*; class cp { public static void main( String args[] ) InputStream fin = new FileInputStream(args[0]); OutputStream fout = new FileOutputStream(args[1]); masol(fin,fout); fin.close(); fout.close(); static void masol(...)... {... Feladat Ü Adott ket fajl, "a.txt" es "b.txt". Fesuljuk í ssze a ket fajl tartalmat a "c.txt" fajlba. Eloszí r egy bajt az "a.txt"-bol, aztan egy a "b.txt"-bol, aztan megint egy az "a.txt"-bol, stb. Ha valamelyik fajl vegeter, a masik fajl maradekat masoljuk a "c.txt" vegere. Visszaterve meg egy percre... static void masol ( InputStream in, OutputStream out ) int b; while( (b=in.read())!= -1 ) out.write(b); out.flush(); Ü Buffer urıtese: az adatok tenylegesen kiırüdjanak a fizikai adathordozüra Masolas tí mbbel static int BlokkMeret = 100; public static void masolblokkonkent ( InputStream in, OutputStream out ) byte[] b = new byte[blokkmeret]; int hossz; while( (hossz=in.read(b)) == BlokkMeret ) out.write(b); if( hossz!= -1 ) out.write(b,0,hossz); out.flush(); Ü egyszerre 100 bajtot masolunk at 10

Feladat Ü Az elozofeladatra adott megoldast müdosıtsd Ő gy, hogy az a.txt es a b.txt fajlokbül 10 bajtos blokkokat masoljon a c.txt fajlba! Veget ert es ures csatornak Ü Ket teljesen kulí nbí zodolog! Ü Veget ert: ha ures, es ures is marad. Ü U res: lehet, hogy meg nem ert veget, csak eppen nem erkezett meg meg az adat Ü Gondoljunk egy halüzati kapcsolatra Ö Pl. a szerver varja, hogy a kliens kuldjí n adatot Mi a kulí nbseg a beolvasü m veletek sza ma ra? Ü Ha veget ert egy csatorna, a beolvasas befejezodik, es a visszateresi ertek jelzi, hogy nincs tí bb adat. Ö elsoread: -1 a visszateresi ertek Ö masik ket read: a beolvasott adatok szamat adja vissza Ü Ha ures a csatorna, a beolvasü m velet blokkol dik, varja, hogy erkezzen adat. Ö a vegrehajtasi szal felfuggesztodik, nem fut tovabb Pelda k Ü Veget ert csatorna: az elozopeldakban a ciklusbül kileptunk, amikor vegetert a bemenet Ü Blokkolt beolvasas: a program var, amıg be nem ırunk egy sort. Ekkor a shell odateszi az adatokat a program szabvanyos bemenetere. public static void main( String args[] ) int i = System.in.read(); System.out.write(i); System.out.flush(); Kulí nbseg a write es a print kí zí tt public static void main( String args[] ) int i = System.in.read(); System.out.write(i); System.out.println(" " + i); Ü Kiırjuk a beolvasott bet t (bajtot) Ő gy, ahogy beolvastuk, majd utana a küdjat. Ü print: kinyomtatas szí veges formaban 11

Mi van meg a fajlokon kıvul? Ü Csatornak segıtsegevel nem csak fajlokbül lehet olvasni, es fajlokba ırni. Ü Memüria, halüzati kapcsolat, nyomtatü, stb. Ü Mindezekrol kicsit kesobb ejtunk majd szüt... Csatornak feladat szerinti csoportosıta sa Ü Alapfunkcionalita s megvalüsıta sa kulí nbí zoadathordozükon (pl. fa jlokon) Ü Extra funkcionalita ssal val ella ta s: szu rok Sz rok Kimeneti csatorna, pl. egy fajl Sz rok Sz rok Egy sz ron keresztul ırunk, ami extra funkcionalitast biztosıt (pl. buffereles) A sz rois egy csatorna, amit egy Ő jabb sz rovel lathatunk el. Komponalhatjuk a sz roket, hogy bonyolultabb viselkedest allıthassunk elo. (Pl. buffereles es print-eles egyszerre) 12

Sz rok Szühaszna lat Ü A sz roket mindig egy mar meglevo csatorna f le hozzuk letre. Ü A sz rocsatorna konstruktoranak parameterkent meg kell adni a sz rt csatornat FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); A sz ro(ke)t megkerulve is ırhatunk a kulsocsatornara, de ez elegge veszelyes. (Gondoljunk pl. arra, hogy a sz roa buffereles...) vagy ajanlott hozzaferes Masodik sz ro Elsosz ro Sz rt csatorna A legfontosabb sz rok Ü Buffereles Ü Adattıpus-ertekek beolvasasa es kiırasa Ü Szí veges forma ban tí rtenokiıra s ( nyomtatas ) Az elsopeldank volt: szí veges kiıra s fa jlba import java.io.*; public static void main( String args[] ) FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); pw.println("hello World!"); pw.close(); A FileWriter objektumnak nincs println mu velete! Az elsopeldank volt: szí veges kiıra s fa jlba import java.io.*; public static void main( String args[] ) FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); pw.println("hello World!"); pw.close(); A szu ro konstruktora nak a tadjuk fw-t! 13

Az elsopeldank volt: szí veges kiıra s fa jlba import java.io.*; public static void main( String args[] ) FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); pw.println(42*integer.parseint(args[0])); pw.close(); Egy PrintWriter szu rovel kinyomtathatunk sza mokat! Az elsopeldank volt: szí veges kiıra s fa jlba import java.io.*; public static void main( String args[] ) FileWriter fw = new FileWriter("a.txt"); PrintWriter pw = new PrintWriter(fw); pw.println(args.length > 0); pw.close(); Vagy logikai ertekeket, stb. Szí veges kiıra s Ü PrintStream es PrintWriter Ü Nevezetesek a System.out es System.err Ü Persze nem csak fajlok fí le hozhatjuk letre... Ü Kinyomtathatunk adattıpus-ertekeket is, es objektumokat is Ö a tostring() metüduson keresztul Ü print: sima kinyomtatas println: mint print, plussz soremeles System.out.print(42); System.out.print("42"); Bina ris kiıra s Ü DataOutputStream Ü Adattıpus-ertekek binaris kiırasa Ö Ha nem egyszer en bajtokat szeretnenk kiırni... Ö Pl. kiırhatjuk egyszerre mind a negy bajtot, ami egy float tıpuső ertekhez kell FileOutputStream fout = new FileOutputStream("a.dat"); DataOutputStream dout = new DataOutputStream(fout); dout.writefloat((float)12.0); Bina ris beolvasa s Ü DataInputStream Ü Ugyanaz visszafele is megy: beolvasunk negy bajtot, es rekonstrualjuk belole a float tıpuső erteket DataInputStream din = new DataInputStream( new FileInputStream("a.dat") ); float f = din.readfloat(); 14

Ü writeboolean Ü writebyte Ü writeshort Ü writechar Ü writeint Ü writelong Ü writefloat Ü writedouble Ü writeutf Lehetosegek Ü readboolean Ü readbyte Ü readshort Ü readchar Ü readint Ü readlong Ü readfloat Ü readdouble Ü readutf Mire jü ez? Ü Adatok tí mí r tarolasat teszi lehetove a bina ris forma tum Ü A DataOutputStream es a DataInputStream segıtsegevel egyszer en lehet adattıpusertekeket elmenteni es visszaolvasni Ü Platform-fuggetlen megoldas: a binaris formatumot a Java pontosan specifikalja (big-endian vs. little-endian problema) Feladat Ü A matrix osztalyt egeszıtsuk ki binaris elmentoes beolvasü m veletekkel. Ü Irjunk hozza tostring() metüdust is, hogy megkí nnyıtsuk a kepernyore valü kiırast. Ü Irjunk egy foprogramot, ami elment egy egysegma trixot. Ü Irjunk egy masik foprogramot, ami egy fajlbül beolvasott matrixhoz hozzaadja a csupa egyes matrixot, es visszaırja a fajlba. Kerdes Ü Melyik hany bajtot ır ki? á dout.writeint(12) á pout.print(12) Kulí nbseg a szí veges es a bina ris forma tum kí zí tt FileOutputStream fout = new FileOutputStream("okos.txt"); DataOutputStream dout = new DataOutputStream(fout); PrintStream pout = new PrintStream(fout); fout dout pout 15

Kulí nbseg a szí veges es a bina ris forma tum kí zí tt FileOutputStream fout = new FileOutputStream("okos.txt"); DataOutputStream dout = new DataOutputStream(fout); PrintStream pout = new PrintStream(fout); dout.writeint( 1869311859); dout.flush(); pout.print( 1869311859); pout.flush(); fout.write( 1869311859); fout.flush(); Ü A szamok tí bbsegenel tenyleg tí mí rebb a binaris forma... PrintStream inverze? Ü DataInputStream - DataOutputStream beolvasas - kiıras Ü??? - PrintStream/PrintWriter Ü Nincs olyan csatornaosztaly, aminek a segıtsegevel egyszer en lehetne szí veges formatumban elmentett adattıpus-ertekeket visszaolvasni Ü Megoldas: BufferedReader - mindjart... Ü Masik: StreamTokenizer (haladü...) Buffereles Ü BufferedInputStream, BufferedReader BufferedOutputStream, BufferedWriter Ü Ezek a csatornak bufferelnek Ü Jü esetben az oprendszer is bufferel... Feladat Ü Jatsszuk ki a bufferelest! Irjunk olyan programot, ami í sszevissza ır egy fajlba. InputStream bin = new BufferedInputStream( new FileInputStream("a.txt") ); Sz rok kompona la sa Ü A bufferelest gyakran hasznaljuk egyeb sz rovel egyutt, pl. Data*Stream FileInputStream fin = new FileInputStream(tavoli_fajl); BufferedInputStream bin = new BufferedInputStream(fin); DataInputStream din = new DataInputStream(bin); float sszeg = 0.0F; for( int i=0; i<100; i++ ) sszeg += din.readfloat(); 16

Meg egy fontos dolog... Ü BufferedReader Ü Sorok olvasa sa szí veges a llomanybül Ü A metüdus: String readline() throws IOException Ü Soremelesig olvas, a soremeles jelet nem adja vissza Ö Soremeles jel: \r \n \r\n Ü Csatorna vege eseten: null Pelda Interaktıv alfanumerikus program public static void main( String args[] ) BufferedReader r = new BufferedReader( new InputStreamReader(System.in)); System.out.println("Uss n be egy szamot: "); String s = r.readline(); int n = Integer.parseInt(s); System.out.println("A szam negyzete: " + n*n); Feladat Ü Irjunk olyan metüdust a matrix osztalyhoz, amelynek segıtsegevel szí veges formatumbül be lehet olvasni egy matrixot. A matrix elemei mind kulí n sorban legyenek! Ü Hasznalj BufferedReader osztalyt egy FileReader fí le hő zva! Kí zvetlen eleres fajlok Ü Sokan szeretnek pozıcionalni egy fajlban... Ü Ez nem megy a csatornaosztalyok eseten Ü RandomAccessFile Ü Meg lehet nyitni egy fajlt, es lehet olvasni ("r") vagy ırni/olvasni ("rw") Ü M veletek: mint DataInputStream es DataOutputStream, de egyutt Pelda Ü Minden ha romhatva nyadik sza mot inkrementa lunk. RandomAccessFile f = new RandomAccessFile("adatok.dat","rw"); int haromhatvany = 1; while( haromhatvany * 4 < f.length() ){ f.seek(haromhatvany * 4); int adat = f.readint(); f.seek(haromhatvany * 4); f.writeint(adat+1); haromhatvany *= 3; f.close(); 17

Feladat Ü Indexelt fajlkezeles Ü Az indexelt fajl 1024 hossző sagő, double ertekeket tartalmazü sorozatokat tartalmaz. Ü Az indexeleshez hasznaljunk lexikografikus rendezest. Mik vannak meg a fajlokon kıvul? Haladü kurzushoz Ü A feladat szerinti csoportosıtas szerint: honnan olvasunk, illetve hova ırunk Ü Lehetosegek a java.io csomagban Ö fajlok Ö csí vek Ö bajt- es karaktertí mbí k, sztringek Ö bajtcsatorna felett definialt karaktercsatornak Ö í sszef zí tt csatornak Mik vannak meg a fajlokon kıvul? Ü A feladat szerinti csoportosıtas szerint: honnan olvasunk, illetve hova ırunk Ü Lehetosegek a java.io csomagban Ö fajlok Ö csí vek Ö bajt- es karaktertí mbí k, sztringek Ö bajtcsatorna felett definialt karaktercsatornak Ö í sszef zí tt csatornak Csí vek Ü Egy PipedInputStream-et es egy PipedOutputStream-et í sszekapcsolhatunk egyma ssal. Ü Amit a pout-ra ırunk, megjelenik az pin-en. Ü Mire jük? Konkurrens vegrehajtasi szalak egyma s kí zí tti kommunika ciüja ra, pl. Ü Kesobb lesz rüluk bovebben szü. 18

Memüria m veletek Ü Az adatok, amiket vegigolvasunk, vagy amiket kiırunk, egy memüriacımtol kezdve, folytonosan helyezkednek el Ü Pelda ul egy ba jttí mbben Ö ByteArrayInputStream, -OutputStream Ü Vagy esetleg egy karaktertí mbben Ö CharArrayReader, -Writer Ü Vagy egy sztringben Ö StringReader, -Writer Ö StringBufferInputStream Karaktertí mbbol olvasunk char[] t = {'r', 'o', 'k', 'a'; CharArrayReader in = new CharArrayReader(t); t[0] = 'f'; System.out.println(in.read()=='f'); "true"-t fog kiırni Ba jtcsatorna k felett definia lt karaktercsatorna k Ü Kapcsolat a ketfele szervezes csatornaoszta lyok kí zí tt Ü A kulí nbí zokarakterküdola si szabva nyok tamogatasa Ü InputStreamReader, OutputStreamWriter Ü Specifikalhatjuk, hogy melyik karakter melyik bajtra legyen lekepezve Karakterek lekepezese bajtokra Ü Egy byte tıpuső ertek 256-fele lehet Ü Karakterbol jüval tí bbfele van Ü Karakterküdolasi szabvany: mely karaktereket reprezentalja ez a 256 kulí nbí zoertek Ü Peldaul a Unicode karakterek ketbajtosak Ö a char tıpus Karakterküdola si szabva nyok Ü ASCII - 7 bit Ü Extended ASCII - 8 bit Ü EBCDIC Ü Latin-1, Latin-2 Ü Windows-os küdtablak Ü Mac-es küdta bla k 19

Pelda Writer w = new OutputStreamWriter(System.out,"8859_2"); w.write(336); w.flush(); System.out.write(336); Ü 8859_2 ISO Latin-2 Ü A 336 Unicode küdő karakter az "Ű " Ü A Latin-2 tartalmazza ezt a karaktert, a 256 lehetseges ertek kí zul a 213 van hozzarendelve Ü Tehat a System.out-ra a 213 bajt fog kiırüdni Ü Platform-fuggo, hogy mit fogunk latni Ö Pl. Latin-1 kepernyoeseten "O" karaktert ISO Latin-1 Ü Az ISO Latin-1 küdolasban szereplo karakterek a Nyugat-Eurüpaban hasznalatos bet ket (is) tartalmazzak Ü Ezen karakterekhez az ISO Latin-1 ugyanazokat a szamokat rendeli, mint a Unicode. Azaz: a Unicode küdtabla elso 256 karaktere ugyanaz, mint a Latin-1 Ü Azaz a hullamos O bet Unicode küdja is 213 ISO Latin-2 Ü Tartalmazza azokat a bet ket is, amelyeket csak mifelenk hasznalnak, nevezetesen az o,, Ű es Ú bet ket Ü Az elobbi peldaban: a 336 Unicode küdő karaktert, az Ű -t, es a 213 ertekkel kapcsolja í ssze Ü Ez a karakter nincs az ISO Latin-1 küdtablaban, abban a hullamos valtozat van a 213 ertekhez kapcsolva Pelda Writer w = new OutputStreamWriter(System.out,"8859_1"); w.write("tekn\u0150c"); w.close(); Ü A \u0150 karakter a 336-os, azaz az Ű bet Ü Ez nincs a Latin-1-ben (8859_1) Ü A kimeneten a? karakternek megfelelobajt ırüdik ki helyette tekn?c Masik pelda Writer w = new OutputStreamWriter(os,"MacCentralEurope"); w.write('í'); w.flush(); // w.write(218); Reader r = new InputStreamReader(is,"Cp1250"); int i = r.read(); System.out.println(i); // 328 jelenik meg Ü A 218 Unicode küd az É bet Ü A MacCentralEurope a 242 küdot rendeli hozza Ü A Windows Latin-2 (azaz a Cp1250) a 328 Unicode küdő karaktert rendeli a 242 ertekhez Ü Ez a n bet 20

Tanulsa g Ü Ugyanazzal a karakterküdolassal erdemes beolvasni, mint amivel kiırtuk az adatokat Ü Ha a Java programunk mas programmal / mas platformmal tartja a kapcsolatot, akkor is jül megy Ü Ez a szabaly platformfuggetlenseget is biztosıt Ü Ket Java program kí zí tti kommunikaciünal is fontos (p. halüzatos program) A Java altal tamogatott karakterküdola si szabva nyok Ü ISO Latin-1, ISO Latin-2,... Ü Windows Latin-1,... Ü Mac küdolasok Ü IBM küdta bla k Ü Tavol-keleti szabvanyok (Big5, JIS, stb.) Ü Mindnek megfelel egy sztring, amit a konstruktornak kell atadni. Pl. "8859_1" Karakterszervezes fa jlcsatorna k Reader fr = new FileReader("olvass.el"); Reader fr = new InputStreamReader( new FileInputStream("olvass.el") ); Reader fr = new InputStreamReader( new FileInputStream("olvass.el"), "8859_2"); Csatornak egymas utan f zese Ü SequenceInputStream Ü A konstruktoranak megadunk tí bb InputStream-et Ü Ezeket egymas utan vegigolvashatjuk: ha az egyik veget er, automatikusan ugrik a kí vetkezore Pelda k InputStream in = new SequenceInputStream( (new FileInputStream("papsajt")), System.in ); Vector v = new Vector(2); v.addelement(new FileInputStream("papsajt")); v.addelement(system.in); InputStream in = new SequenceInputStream(v.elements()); Ü Vegigolvashatjuk a "papsajt" fajlt, es folytatjuk az olvasast a szabvanyos bemenetrol 21

Mibol lehet meg olvasni, mire lehet meg ırni? Ü Mas kí nyvtarakban is vannak olyan osztalyok, metüdusok, amelyek segıtsegevel csatornakhoz juthatunk hozza Ü Peldaul a java.net.socket osztalytül tudunk olyan bemeneti es kimeneti csatornakat beszerezni, amivel halüzati kapcsolaton keresztul lehet irkalni, olvasgatni... Kiegeszıtesek az alapfunkcionalita shoz Ü A ket bemeneti csatorna alaposztalynak, az InputStream-nek es a Reader-nek tova bbi "szolga ltata sai" Ü Kí nyvjelzomechanizmus Ü Adatelerhetoseg-vizsga lat Adatelerhetoseg-vizsga lat Ü InputStream: Ü Reader: int available() boolean ready() Ü Meg lehet tudni, hogy a beolvasas blokkolüdni fog-e. Az available csak becslest ad! public static int meret( String fnev ) return (new FileInputStream(fnev)).available(); Kí nyvjelzomechanizmus Kí nyvjelzomechanizmus void mark(int readlimit) throws IOException boolean marksupported() void reset() throws IOException void mark(int readlimit) throws IOException boolean marksupported() void reset() throws IOException Ü Betehetek egy kí nyvjelzot az aktualis pozıciüra Ü... amennyiben a csatornaosztaly tamogatja... Ü Visszaugrok a kí nyvjelzoig Ü Betehetek egy kí nyvjelzot az aktualis pozıciüra Ö Ha visszaugrok a reset-tel, akkor innen kezdve megint elolvashatom a csatorna tartalmat Ö A mark es a reset kí zí tt max. "readlimit" bajtot olvashatok at... 22

Kí nyvjelzomechanizmus void mark(int readlimit) throws IOException boolean marksupported() void reset() throws IOException Ü Jünehany csatornaosztaly tamogatja a kí nyvjelzomechanizmust, de jü sok nem Pelda public static void ketszer ( ByteArrayInputStream in ) int c; in.mark(in.available()); while( (c=in.read())!= -1 ) System.out.println(c); in.reset(); // meg egyszer ırjuk ki ugyanazt while( (c=in.read())!= -1 ) System.out.println(c); Extra funkcionalitas: sz rok Ü Mar beszeltunk ezekrol: Ö buffereles Ö adattıpus-ertekek Ö szí veges nyomtatas Ü Tovabbiakat fogunk megismerni... Meg mielott raternenk... Ü DataInputStream DataOutputStream String readutf() void writeutf(string s) Ü PrintStream, PrintWriter kivetelek DataInputStream DataOutputStream String readutf() void writeutf(string s) Ü Unicode sztringek elmentese es visszaolvasa sa Ü Platformfuggetlen Ö Ő n. UTF-8 formatumban Ü Informaciüvesztes nelkul Ö ugyanis a karakterszervezes csatornak csak a nekik megfelelokarakterküdolasi szabvany szerinti karaktereket tudjak 23

Feladat Ü Irjunk ki fajlba sztringeket es karaktertí mbí ket az í sszes a ltalunk ismert müdon. Ü Derıtsuk fel a kulí nbsegeket! PrintStream, PrintWriter: kivetelek Ü A m veletek nem valtanak ki IOException kivetelt gond eseten Ü Helyette egy error-flag-et allıtanak boolean checkerror() Extra funkcionalitas: tovabbi sz rok Ü bemenet sorainak szamolasa Ü adat visszatevese Ü objektumok beolvasasa / kiırasa Ü tí mí rıtes Ü stb. A bemenet sorainak szamolasa Ü LineNumberReader, LineNumberInputStream LineNumberReader be = new LineNumberReader( new FileReader("borok.txt") ); String sor; while( (sor = be.readline())!= null ){ if( sor.endswith("bor") ) System.out.println(be.getLineNumber()-1); be.close(); Adat visszatevese a bemeneti csatorna ra Ü PushbackReader, PushbackInputStream PushbackReader be = new PushbackReader( new InputStreamReader(System.in), 2 ); int c = be.read(); while( (c == ' ') (c == '\t') (c == '\r') (c == '\n') ) c = be.read(); if( c!= -1 ){ be.unread(c); be.unread(' '); 24

Objektumok ta rola sa Ü ObjectInputStream, ObjectOutputStream Ü kiterjesztik a Data*putStream osztalyokat Ü de nem csak adattıpus-ertekeket lehet elmenteni / visszaolvasni, hanem objektumokat is void writeobject( Object obj ) throws IOException Object readobject() throws OptionalDataException, ClassNotFoundException, IOException Objektumok ta rola sa Ü ObjectInputStream, ObjectOutputStream Ü kiterjesztik a Data*putStream osztalyokat Ü de nem csak adattıpus-ertekeket lehet elmenteni / visszaolvasni, hanem objektumokat is void writeobject( Object obj ) throws... Object readobject() throws... Szerializa ciü Ü Amikor egy objektumot elmentunk, azokat az objektumokat is el kell menteni, amelyekre hivatkozik... Ü E s ez ıgy megy rekurzıvan... Ü Ha egy objektum a hivatkozottak kí zí tt tí bbszí r is elofordul, akkor is csak egyszer kell elmenteni! Serializable Ü Ezt a bonyolult feladatot a Java megcsinalja nekunk. Ü Csak annyit kell tenni, hogy megvalüsıtjuk a Serializable interfeszt Ö nem specifikal metüdusokat... Ö csak oda kell ırni az osztalyunk definıciüjaba Mi is tí rtenik? Ü Metainformaciü is elmentesre kerul Ö az objektum osztalya, verziüszam, stb. Ü Elmentodnek az objektum adattagjai Ü Elmentodnek a hivatkozott objektumok is rekurzıvan Ü Ha az objektum mar korabban el lett mentve, akkor helyette egy "mutatü" lesz elmentve 25

Pelda Vector v = new Vector(); v.add("lennon"); v.add(new Integer(42)); ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("a.dat") ); out.writeobject(v); out.close(); ObjectInputStream in = new ObjectInputStream( new FileInputStream("a.dat") ); v = (Vector) in.readobject(); System.out.println(v); Feladat Ü Csinaljunk egy foní kí t ket beosztottal. Mentsuk el a foní kí t. Ü Egy masik programmal olvassuk be a foní kí t (a ket beosztottjaval egyutt). Ü Az Alkalmazott es a Foní k osztalyokban ırjunk tostring() metüdust, hogy tudjuk tesztelni az elozoket programot... Ü Csak a hecc kedveert... a foní k egyik beosztottja legyen sajat maga. Finomhangola s Ü Lehet szabalyozni, hogy pontosan mi is mentodjí n el az objektum altal tarolt adatokbül Ü Tí bb szinten nyılik lehetoseg a szabalyozasra Ö transient Ö read/writeobject feluldefinialasa Ö serialpersistantfields Ö Externalizable Finomhangola s Ü Lehet szabalyozni, hogy pontosan mi is mentodjí n el az objektum altal tarolt adatokbül Ü Tí bb szinten nyılik lehetoseg a szabalyozasra Ö transient Ö read/writeobject feluldefinialasa Ö serialpersistantfields Ö Externalizable transient Ü Egy müdosıtüszü Ö mint pl. public, final, abstract, stb. Ü Ha egy adattagot nem szeretnenk szerializaciü soran elmenteni, akkor ele ırjuk, hogy transient Ü Mire hasznaljuk? Ö Egyszeri adat, pl. eroforras-leırü (Frame) Ö Bizalmas adat Ö Redundans informaciü 26

A fajlrendszer fajljaihoz valü hozza feres Ü A File osztalyon keresztul tí rtenhet Ü A File objektumok fajlneveket reprezenta lnak Ü Nem fajlokat: egy File objektumon keresztul nem lehet olvasni vagy ırni egy fajlt. Arra ott vannak Ö a csatornak Ö a kí zvetlen eleres fajlok Mit lehet csinalni File objektumokkal? Ü Lekerdezni, hogy letezik-e olyan nev fajl Ü Lekerdezni, hogy olvashatü/ırhatü-e Ü Egy fa jlt tí rí lni Ü Atnevezni Ü Kí nyvtarat kilista zni Ü stb. Pelda File t rlend = new File("dobj.ki"); if( t rlend.canwrite() ) t rlend.delete(); Ü Ezek m veletek a fajlrendszeren... File objektum letrehozasa File k nyvtar = new File("/usr/local/bin"); File ez_is_az = new File("/usr/local","bin"); File fajl = new File(k nyvtar,"vim"); String elv = File.separator; File k nyvtar = new File(elv+"usr"+elv+"local"+elv+"bin"); M veletekre pelda public boolean exists() public boolean isfile() public boolean renameto( File cel ) public boolean mkdir() public boolean isabsolute() public File getparentfile() public long lastmodified() 27

Feladat Ü Listazzuk ki a tmp alkí nyvtar í sszes txt kiterjesztes fajljanak nevet! Ü Ehhez kicsit kí rul kell nezni az API dokumenta ciüban... Szí vegfeldolgoza s Ü StreamTokenizer Ü Egy csatorna tartalmat tokenekre bontja int nexttoken() throws IOException Ö szamok Ö azonosıtük Ö megjegyzesek Ü Egy csatorna fí le hozzuk letre, mint egy sz rot (de ez nem csatorna) Szavakra bontunk egy szí veget import java.io.*; class Szavakra { public static void main( String args[] ) StreamTokenizer st = new StreamTokenizer( new InputStreamReader(System.in) ); while( st.nexttoken()!= StreamTokenizer.TT_EOF ) if( st.ttype == StreamTokenizer.TT_WORD ) System.out.println(st.sval); Pr ba ld ki! Javıta s st.ordinarychar(46); st.slashstarcomments(true); Ü A pont ıra sjel kí zí nseges karakter. A szí vegben a C-stılusŐ megjegyzeseket figyelmen kıvul akarjuk hagyni. A kutya /* ez egy allat */ ugat. A kutya ugat int-tek beolvasasa szí veges formatumbül Ü Szí veg formatum, pl. szí vegfajl Ü int tıpuső ertekeket tartalmaz Ü Szeretnenk egy csatorna osztalyt, amivel ilyet kí nny feldolgozni Ü Sz rocsatornakent valüsıtjuk meg Ö A PrintStream inverze Ü Segıt a StreamTokenizer osztaly 28

int-tek beolvasasa szí veges formatumbül import java.io.*; class NotExpectedTokenException extends Exception { public int token; public NotExpectedTokenException( int token ) { this.token=token; public class TypedReader extends FilterReader { public TypedReader( Reader in ){ super(in); public int scanint() throws NotExpectedTokenException, IOException {... public static void main( String[] args )... public int scanint() throws NotExpectedTokenException, IOException { StreamTokenizer st = new StreamTokenizer(in); st.ordinarychar('/'); // nincs megjegyzesjel st.ordinarychar('.'); // ne legyen tizedespont st.nexttoken(); if ( (st.ttype==streamtokenizer.tt_number) && (st.nval>=integer.min_value) && (st.nval<=integer.max_value) ) return (int)st.nval; // sikerult szamkent ertelmezni else throw new NotExpectedTokenException(st.ttype); public static void main( String[] args ) TypedReader in = new TypedReader( new InputStreamReader(System.in) ); int sum = 0; boolean endofints = false; while (!endofints) { System.out.print("Irjon be egy szamot: "); try { sum += in.scanint(); System.out.println(); catch (NotExpectedTokenException e) { endofints=true; System.out.println("\nAz sszeg: " + sum); Feladat Ü A matrix osztalyhoz ırjunk olyan beolvasü m veletet, ami egy szí vegfajlbül olvas be egy matrixot. A szí vegfajlban nem feltetlenul soronkent vannak a matrix elemei, egy sorban lehet tí bb is. Az elemeket feher szükí zí k valasztjak el. Ha ettol elterobemenetet tapasztalunk, valtsunk ki kivetelt! 29