JAVA PROGRAMOZÁS 7.ELŐADÁS

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

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

JAVA PROGRAMOZÁS 8.ELŐADÁS

JAVA PROGRAMOZÁS 3.ELŐADÁS

TCP/IP kapcsolat Java nyelven

Java programozási nyelv

Reader /Writer InputStreamReader, OutputStreamWriter

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

Be- és kimenet kezelése

Programozási technológia

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

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

Dr. Iszály György Barna

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

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

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

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

Programozási nyelvek II.: JAVA

Programozási nyelvek Java

Input Output Műveletek

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

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

A Java nyelv. Dialógus ablakok. Elek Tibor

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

Java gyakorlat feladatai e s megolda sai ( )

Programozási nyelvek Java

Segédanyag: Java alkalmazások gyakorlat

Pénzügyi algoritmusok

JAVA PROGRAMOZÁS 5.ELŐADÁS

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

Informatika terméktervezőknek

Objektumorientált programozás C# nyelven

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

Programozási nyelvek Java

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

és az instanceof operátor

Programozási nyelvek JAVA EA+GY 1. gyakolat

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

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

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?

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

OOP #14 (referencia-elv)

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

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

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

Programozás alapjai 6. előadás. Wagner György Általános Informatikai Tanszék

Programozási nyelv Java

Programozási nyelvek Java

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

ELTE SAP Excellence Center Oktatóanyag 1

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

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

Adatszerkezetek és algoritmusok

Osztályok. 4. gyakorlat

Objektumorientált programozás C# nyelven

Segédanyag: Java alkalmazások gyakorlat

SZOFTVERFEJLESZTÉS ANDROID PLATFORMRA. Dr. Iszály György Barna

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

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

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

Programozási technológia I.

Nyíregyházi Egyetem Matematika és Informatika Intézete. Fájl rendszer

2018, Funkcionális programozás

Programozási nyelvek II.: JAVA

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

JAVA SE/ME tanfolyam tematika

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

Fájlok, stream-ek. Fájlok és könyvtárak Stream-ek csoportosítása A stream-ek osztályhierarchiája Stream-ek használata

ANDROID ALKALMAZÁSFEJLESZTÉS

Kivételkezelés, naplózás. Exception handling, logging

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

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

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

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

Programozási nyelvek Java

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

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

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

Java programozási nyelv 7. rész Java osztálykönyvtár 1.

Tudásszint mérés feladatlap

1. Alapok. Programozás II

Python tanfolyam Python bevezető I. rész

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Interfészek. PPT 2007/2008 tavasz.

Programozási nyelvek II.: JAVA

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 6.ELŐADÁS. Fájlkezelés PHP-ben

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Kommunikáció. Folyamatok közötti kommunikáció. Minden elosztott rendszer alapja

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Thermo1 Graph. Felhasználói segédlet

A C programozási nyelv VI. Parancssori argumentumok File kezelés

Programozási nyelvek II.: JAVA

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

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

Programozás I. Szöveges fájlok kezelése Felsorolástípus Objektumtömb Gyakorló feladatok

1. Egyszerű (primitív) típusok. 2. Referencia típusok

C++ programozási nyelv Konstruktorok-destruktorok

Átírás:

Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 7.ELŐADÁS 2014-2015 tavasz Állománykezelés

2 Állományok, bejegyzések

3 A java.io csomag

Útvonalak 4 Absztrakt / valódi útvonal A valódi útvonal részei Prefix: "www.gdf.hu/", "/"(Unix), "c:\", "\\"(Windows) Nulla vagy több név szeparátorokkal elválasztva Szeparátor: "/"(Unix), "\"(Windows) Útvonalszeparátor: ":"(Unix), ";"(Windows) Helyi / távoli Abszolút / relatív Szülő / gyermek

Útvonalak 5 Példa: Abszolút útvonal Aktuális könyvtár Relatív útvonal Név c:\javaprog\work\icons\insert.gif Szülő útvonal Gyermek útvonal

File osztály 6 Bejegyzést reprezentál A bejegyzést útvonalával azonosítja Mezők static String separator static char separatorchar static String pathseparator static char pathseparatorchar Konstruktorok File(String pathname) File(String parent, String child) File(File parent, String child)

File osztály 7 Metódusok - A bejegyzés útvonala boolean isabsolute() String getabsolutepath() File getabsolutefile() String getpath() String getcanonicalpath() throws IOException File getcanonicalfile() throws IOException String getparent() File getparentfile() String getname()

File osztály 8 Metódusok - A bejegyzés tulajdonságai boolean isdirectory() boolean isfile() long length() long lastmodified() boolean setlastmodified(long time) boolean canread() boolean canwrite() boolean exists() boolean ishidden() boolean setreadonly()

File osztály 9 Metódusok Karbantartás boolean mkdir() boolean mkdirs() boolean createnewfile() throws IOException boolean delete() void deleteonexit() boolean renameto(file dest)

File osztály 10 Metódusok - Bejegyzéslisták String[] list() String[] list(filenamefilter filter) File[] listfiles() File[] listfiles(filenamefilter filter) static File[] listroots() Metódusok - Egyéb equals(object o) compareto(file pathname) compareto(object o) String tostring()

11 Példa - Jellemzők

Állományműveletek - Példa 12 Adva vannak a következő könyvtárak és állományok: c:/javaprog/work/proba/app.java c:/javaprog/work/proba/fileattributes.clas c:/javaprog/work/proba/fileattributes.java c:/javaprog/work/proba/icons/delete.gif c:/javaprog/work/proba/icons/insert.gif A c:/javaprog/work/proba könyvtárban végezzük el a következő állományműveleteket: Nevezzük át azapp.java állománytapp.~jav-ra! Töröljük ki a teljes icons könyvtárat! Feltételezzük, hogy abban nincs további könyvtár. Hozzunk létre egy üresreadme.txt szöveges állományt! Minden egyes művelet után listázzuk ki a könyvtár tartalmát!

13 Állományműveletek - Példa

14 Állományműveletek - Példa

15 Állományműveletek - Példa

Szűrés FilenameFilter interfész 16 Könyvtárbejegyzések szűrését szolgálja Metódus boolean accept(file dir, String name) Feladat: Írjuk ki konzolra a program paramétereként megadott könyvtár összes exe állományát! Ha nem adnak meg paramétert, akkor az aktuális könyvtárból listázzunk

Szűrés FilenameFilter interfész 17 Feladat (folytatás):

Szűrés FilenameFilter interfész 18 Feladat (folytatás):

Állománykiválasztó dialógus 19 JFileChooser Könyvtárlista Könyvtár Fájlnév Szűrő

Állománykiválasztó dialógus 20 JFileChooser (folyt.) Modális dialógus ablak, melynek feladata egy abszolút útvonal bekérése A dialógus elemei Aktuális könyvtár Könyvtárlista Szűrő Fájlnév Dialógus típusai: megnyitás, mentés Mezők static int OPEN_DIALOG, SAVE_DIALOG static int APPROVE_OPTION, CANCEL_OPTION, ERROR_OPTION

Állománykiválasztó dialógus 21 JFileChooser (folyt.) Jellemzők String dialogtitle int dialogtype (OPEN_DIALOG, SAVE_DIALOG) int fileselectionmode (FILES_ONLY (alapért.), DIRECTORIES_ONLY, FILES_AND_DIRECTORIES) boolean multiselectionenabled FileFilter filefilter File currentdirectory File selectedfile File[] selectedfiles

Állománykiválasztó dialógus 22 JFileChooser (folyt.) Konstruktorok JFileChooser() JFileChooser(File currentdirectory) JFileChooser(String currentdirectorypath) Metódusok int showopendialog(component parent) int showsavedialog(component parent) Lehetséges visszatérési értékek: APPROVE_OPTION, CANCEL_OPTION, ERROR_OPTION String getname(file f)

Állománykiválasztó dialógus 23 JFileChooser (folyt.) Példa:

Állománykiválasztó dialógus 24 JFileChooser (folyt.) Példa:

25 Folyamok

26 Osztályok

A folyam fogalma 27 Folyam (stream): objektum, amely egy célhelyre adatokat képes sorosan írni, ill. egy forráshelyről sorosan olvasni Folyamok osztályzása (feldolgozott elemek típusa szerint) Bájtfolyam (byte stream) Karakterfolyam (character stream) Adatfolyam (data stream) Objektumfolyam (object stream) Folyamok osztályzása (adatfeldolgozás iránya szerint) Beviteli folyam (input stream) Kiviteli folyam (output stream)

Egyéb fogalmak 28 Folyam mutatója Forráshely, célhely Fizikai hely (pl. fájl, konzol, billentyűzet, nyomtató) vagy másik folyam Megadása: létrehozáskor (konstr. paramétereként) Szűrőfolyam (filter stream) Folyamok összekapcsolásánál használjuk Továbbító, szűrő szerepet játszik Szűrők ősosztályai: FilterInputStream, FilterOutputStream Szűrőfajták Pufferelés: Buffered... Konverzió: Data...

29 Példa

Példa 30 DataOutputStream dos = new DataOutputStream( new FileOutputStream("adatok.dat")); dos.writedouble(12.4); dos.writeboolean(true); dos.writechar('é'); dos.close(); DataInputStream dis = new DataInputStream( new FileInputStream("adatok.dat")); double d = dis.readdouble(); // 12.4 boolean b = dis.readboolean(); // true char c = dis.readchar(); // 'é' dis.close();

Bájtfolyam (byte stream) 31 Írás/olvasás egysége: bájt (0..255) Minden adatsorozat feldolgozható bájtfolyamként Absztrakt ősei: InputStream, OutputStream Állományból olvasó bájtfolyam: FileInputStream Állományba író bájtfolyam: FileOutputStream

32 Bájtfolyam osztályok

InputStream 33 Összes beviteli bájtfolyam absztrakt őse Metódusok abstract int read() throws IOException int read(byte[] b) throws IOException int read(byte[] b, int off, int len) throws IOException int available() throws IOException long skip(long n) throws IOException void close() throws IOException

OutputStream 34 Összes kiviteli bájtfolyam absztrakt őse Metódusok abstract void write(int b) throws IOException void write(byte[] b) throws IOException void write(byte[] b, int off, int len) throws IOException void flush() throws IOException void close() throws IOException

35 FileInputStream - állományból olvasó bájtfolyam FileInputStream +FileInputStream(name: String) {FileNotFoundException} +FileInputStream(file: File) {FileNotFoundException} +read():int {IOException} +read(b: byte[]): int {IOException} +read(b: byte[], off: int, len: int): int {IOException} +available(): int {IOException} +skip(n: long): long {IOException} +close() {IOException}...

36 FileOutputStream - állományba író bájtfolyam FileOutputStream +FileOutputStream(name: String) {FileNotFoundException} +FileOutputStream(file: File) {FileNotFoundException} +FileOutputStream(name: String, append: boolean) {FileNotFoundException} +write(b: int):int {IOException} +write(b: byte[]):int {IOException} +write(b: byte[], off: int, len: int):int {IOException} +flush() {IOException} +close() {IOException}...

Példa Állomány másolása 37 1. megoldás bevitel és kivitel bájtonként

Példa Állomány másolása 38 2. megoldás bevitel és kivitel egy adagban 3. megoldás biztonságos lezárás

Karakterfolyam (character stream) 39 Írás/olvasás egysége: unikód karakter (2 bájt) Szöveges állományok feldolgozására szokás használni Absztrakt ősei: Reader, Writer Pl.: FileReader, FileWriter

Reader 40 Összes beviteli karakterfolyam absztrakt őse Metódusok int read() throws IOException int read(char[] cbuf) throws IOException abstract int read(char[] cbuf,int off, int len) throws IOException boolean ready() throws IOException long skip(long n) throws IOException abstract void close() throws IOException

Writer 41 Összes kiviteli karakterfolyam absztrakt őse Metódusok void write(int c) throws IOException void write(char[] cbuf) throws IOException abstract void write(char[] cbuf, int off, int len) throws IOException void write(string str) throws IOException void write(string str, int off, int len) throws IOException abstract void flush() throws IOException abstract void close() throws IOException

Szöveges állomány 42 Csak olvasható karaktereket tartalmazó állomány Sorokból áll, a sorok pedig karakterekből Soros szervezésű Logikai szerkezet

Szöveges állomány 43 Állományból olvasó karakterfolyam: FileReader Állományba író karakterfolyam: FileWriter Karakterkódolás A szöveges állomány tárolásának módja az operációs rendszer karakterkódolási szabványától függ Lemezen tárolt karakter és a Java karakterei között kódolás/dekódolás: InputStreamReader, OutputStreamWriter

44 FileReader - állományból olvasó karakterfolyam FileReader +FileReader(fileName: String) {FileNotFoundException} +FileReader(file: File) {FileNotFoundException} +read():int {IOException} +read(cbuf: char[]):int {IOException} +read(cbuf: char[], off: int, len: int):int {IOException} +ready():boolean {IOException} +skip(n: long):long {IOException} +close() {IOException}...

45 FileWriter - állományba író karakterfolyam FileWriter +FileWriter(fileName: String) {FileNotFoundException} +FileWriter(file: File) {FileNotFoundException} +FileWriter(fileName: String, append:boolean) {FileNotFoundException} +write(c: int) {IOException} +write(cbuf: char[]) {IOException} +write(cbuf: char[], off: int, len: int) {IOException} +write(str: String) {IOException} +write(str: String, off: int, len: int) {IOException} +flush() {IOException} +close() {IOException}...

46 Példa Állomány bővítés

PrintWriter 47 print és println metódusokat definiál az adatok olvasható formában kerülnek ki a karakterfolyamra PrintStream PrintWriter-hez hasonló, de elavult System.out és System.err szabványos eszközök osztálya System.out és System.err szabványos eszközök osztálya Példa (szöveges állomány írása formázva): PrintWriter writer = new PrintWriter(new FileWriter("print.txt")); writer.println("double: "+12.78); writer.print('a'); writer.println(new Integer(66)); writer.close();

Adatfolyam (data stream) 48 Írás/olvasás egysége: primitív adat vagy String Szűrő bájtfolyam: primitív adat / String bájt konverzió Pl.: DataInputStream, DataOutputStream DataInput, DataOutput interfészek primitív adat és String írása / olvasása primitív adat / String bájt konverzió FilterInputStream, FilterOutputStream Szűrőfolyamok ősosztályai

49 Bájtfolyamok

Interfészek 50 DataInput interfész (bájt primitív adat / String) boolean readboolean() throws IOException byte readbyte() throws IOException String readline() throws IOException String readutf() throws IOException DataOutput interfész (primitív adat / String bájt) void write(int b) throws IOException void write(byte[] b) throws IOException void write(byte[] b, int off, int len) throws IOException void writeboolean(boolean v) throws IOException void writebyte(int v) throws IOException void writebytes(string s) throws IOException void writechars(string s) throws IOException

DataInputStream/DataOutputStream 51 DataInputStream Beviteli szűrő adatfolyam Csak egy másik bájtfolyamból tud olvasni bájt primitív adat / String konverzió Konstruktor: DataInputStream(InputStream in) DataOutputStream Kiviteli szűrő adatfolyam Csak egy másik bájtfolyamba tud írni primitív adat / String bájt konverzió Konstruktor: DataOutputStream(OutputStream out)

52 Példa Egész számok írása, olvasása

Pufferező folyam 53 Memória és egy külső erőforrás (pl. fájl) között az író/olvasó műveletek számát csökkenti BufferedInputStream, BufferedOutputStream Bájtfolyamot pufferező beviteli/kiviteli szűrőfolyam Konstruktorok BufferedInputStream(InputStream in) BufferedInputStream(InputStream in, int size) BufferedOutputStream(OutputStream out) BufferedOutputStream(OutputStream out, int size)

Pufferező folyam 54 BufferedReader, BufferedWriter Karakterfolyamot pufferező beviteli/kiviteli folyam Konstruktorok BufferedReader(Reader in) BufferedReader(Reader in, int size) BufferedWriter(Writer out) BufferedWriter(Writer out, int size)

55 Pufferező folyam

Példa Adatok kiírása 56 FileOutputStream os1 = new FileOutputStream("adatok.dat"); BufferedOutputStream os2 = new BufferedOutputStream(os1); DataOutputStream os3 = new DataOutputStream(os2); /* Szebben: DataOutputStream os3 = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("adatok.dat"))); */ os3.writeint(12); os3.writechar('a'); os3.writefloat(5.2f); os3.writeboolean(true); os3.close();

Példa Adatok visszaolvasása 57 FileInputStream is1 = new FileInputStream(fájl); BufferedInputStream is2 = new BufferedInputStream(is1); DataInputStream is3 = new DataInputStream(is2); /* Szebben: DataInputStream is3 = new DataInputStream(new BufferedInputStream(new FileInputStream("adatok.dat"))); */ int i = is3.readint(); char c = is3.readchar(); float f = is3.readfloat(); boolean b = is3.readboolean(); is3.close();

58 Példa

Objektumfolyam (object stream) 59 Írás/olvasás egysége: primitív adat vagy szerializálható objektum Szerializáció Objektum bájtfolyam Előnye: objektumok perzisztensen eltárolhatók Írás objektum bájtfolyam ObjectOutputStream Olvasás bájtfolyam objektum ObjectInputStream

60 Bájtfolyamok

61 ObjectOutputStream

62 ObjectInputStream

Egy objektum szerializálásának szabályai 63 Az objektum osztályának implementálnia kell a Serializable jelölő interfészt Szerializálás deklarálás sorrendjében minden objektum csak egyszer kerül tárolásra java.io.notserializableexception keletkezhet Szerializáláskor a bájtfolyamra kerülő adatok: osztály azonosításához: osztály neve, azonosítója, objektum adatai(kivéve static és transient adatok)

Egy objektum szerializálásának szabályai 64 Visszatöltéskor az objektum állapota ugyanaz lesz, mint kimentéskor volt Visszaolvasás ugyanolyan sorrendben, mint kiíráskor java.lang.classnotfoundexception keletkezhet Alapértelmezett szerializáló mechanizmus Felírja az objektum osztályának nevét, azonosítóját Felírja az objektum összes saját és ős adatmezőjét, kivéve a tranziens és statikus mezőket

65 Példa Objektum elmentése és visszaolvasása Írjunk ki egy "work/objektumok.dat" állományba két String-objektumot, egy primitív egész számot, és egy saját, MyClass osztályú objektumot. Olvassuk vissza az állomány tartalmát!

66 Példa Objektum elmentése és visszaolvasása

67 Példa Objektum elmentése és visszaolvasása

Transient 68 Ha azt szeretnénk, hogy egy példányadat ne kerüljön stream-re, akkor az adatot transient módosítóval kell ellátnunk A transient jelentése: múlandó, átmeneti Egy ilyen mező minden esetben a program futása során kap értéket Visszaolvasáskor a rendszer tudja, hogy ennek a mezőnek helyet kell foglalni, de értéket nem ad neki

Könyvészet 69 Angster Erzsébet, Objektumorientált tervezés és programozás. Java I-II. (Bazele programării orientate pe obiecte), Ed. 4 Kör Bt., Budapesta, 2002. Kathy Sierra, Bert Bates: Agyhullám: Java, Kiskapú, 2011.