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

JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

JAVA PROGRAMOZÁS7.ELŐADÁS

Dr. Pál László, Sapientia EMTE, Csíkszereda

7.ELŐADÁS

Állománykezelés2014-2015 tavasz

Page 2: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Állományok, bejegyzések2

Page 3: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

A java.io csomag3

Page 4: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Útvonalak4

� 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� 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

Page 5: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Útvonalak5

� Példa:

Aktuális könyvtár Relatív útvonal

Abszolút útvonal

NévNév

Gyermek útvonalSzülő útvonal

c:\javaprog\work\icons\insert.gif

Page 6: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

File osztály6

� Bejegyzést reprezentál

� A bejegyzést útvonalával azonosítja� Mezők

� static String separatorstatic char separatorCharstatic char separatorChar

� static String pathSeparatorstatic char pathSeparatorChar

� Konstruktorok� File(String pathname)� File(String parent, String child)

File(File parent, String child)

Page 7: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

File osztály7

� Metódusok - A bejegyzés útvonala

� boolean isAbsolute()

� String getAbsolutePath()File getAbsoluteFile()

� String getPath()

� String getCanonicalPath() throws IOExceptionFile getCanonicalFile() throws IOException

� String getParent()File getParentFile()

� String getName()

Page 8: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

File osztály8

� 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()

Page 9: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

File osztály9

� Metódusok – Karbantartás

� boolean mkdir()boolean mkdirs()

� boolean createNewFile() throws IOException

� boolean delete()

� void deleteOnExit()

� boolean renameTo(File dest)

Page 10: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

File osztály10

� Metódusok - Bejegyzéslisták

� String[] list()String[] list(FilenameFilter filter)

� File[] listFiles()File[] listFiles(FilenameFilter filter)File[] listFiles(FilenameFilter filter)

� static File[] listRoots()

� Metódusok - Egyéb

� equals(Object o)compareTo(File pathName)compareTo(Object o)

� String toString()

Page 11: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Példa - Jellemzők11

Page 12: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Állományműveletek - Példa12

� Adva vannak a következő könyvtárak és állományok:c:/javaprog/work/proba/App.javac:/javaprog/work/proba/FileAttributes.clasc:/javaprog/work/proba/FileAttributes.javac:/javaprog/work/proba/icons/delete.gifc:/javaprog/work/proba/icons/insert.gifc:/javaprog/work/proba/icons/insert.gif� A c:/javaprog/work/proba könyvtárban végezzük el akövetkező állományműveleteket:− Nevezzük át az App.java állományt App.~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 üres readme.txt szöveges állományt!

� Minden egyes művelet után listázzuk ki a könyvtár tartalmát!

Page 13: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Állományműveletek - Példa13

Page 14: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Állományműveletek - Példa14

Page 15: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Állományműveletek - Példa15

Page 16: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Szűrés – FilenameFilter interfész16

� Könyvtárbejegyzések szűrését szolgálja

� Metódus

� boolean accept(File dir, String name)

� Feladat:� 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

Page 17: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Szűrés – FilenameFilter interfész17

� Feladat (folytatás):

Page 18: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Szűrés – FilenameFilter interfész18

� Feladat (folytatás):

Page 19: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Állománykiválasztó dialógus –JFileChooser

19

KönyvtárKönyvtárlista

SzűrőFájlnév

Page 20: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Állománykiválasztó dialógus –JFileChooser (folyt.)

20

� 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� 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

Page 21: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Állománykiválasztó dialógus –JFileChooser (folyt.)

21

� Jellemzők

� String dialogTitle

� int dialogType (OPEN_DIALOG, SAVE_DIALOG)

� int fileSelectionMode� int fileSelectionMode(FILES_ONLY (alapért.), DIRECTORIES_ONLY,FILES_AND_DIRECTORIES)

� boolean multiSelectionEnabled

� FileFilter fileFilter

� File currentDirectory

� File selectedFile

File[] selectedFiles

Page 22: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Állománykiválasztó dialógus –JFileChooser (folyt.)

22

� 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)

Page 23: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Állománykiválasztó dialógus –JFileChooser (folyt.)

23

� Példa:

Page 24: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Állománykiválasztó dialógus –JFileChooser (folyt.)

24

� Példa:

Page 25: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Folyamok25

Page 26: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Osztályok26

Page 27: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

A folyam fogalma27

� 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)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)

Page 28: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Egyéb fogalmak28

� 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...

Page 29: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Példa29

Page 30: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Példa30

DataOutputStream dos = new DataOutputStream(new FileOutputStream("adatok.dat"));

dos.writeDouble(12.4);dos.writeBoolean(true);dos.writeChar('é');dos.close();dos.close();

DataInputStream dis = new DataInputStream(new FileInputStream("adatok.dat"));

double d = dis.readDouble(); // � 12.4boolean b = dis.readBoolean(); // � truechar c = dis.readChar(); // � 'é'dis.close();

Page 31: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

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: � Állományból olvasó bájtfolyam: FileInputStream

� Állományba író bájtfolyam: FileOutputStream

Page 32: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Bájtfolyam osztályok32

Page 33: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

InputStream33

� Összes beviteli bájtfolyam absztrakt őse

� Metódusok

� abstract int read() throws IOException

� int read(byte[] b) throws IOException� int read(byte[] b) throws IOExceptionint read(byte[] b, int off, int len) throws IOException

� int available() throws IOException

� long skip(long n) throws IOException

� void close() throws IOException

Page 34: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

OutputStream34

� Ö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) throws IOExceptionvoid write(byte[] b, int off, int len) throws IOException

� void flush() throws IOException

� void close() throws IOException

Page 35: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

FileInputStream - állományból olvasó bájtfolyam

35

FileInputStream

+FileInputStream(name: String) {FileNotFoundException}+FileInputStream(file: File) {FileNotFoundException}+read():int {IOException}+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}...

Page 36: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

FileOutputStream - állományba író bájtfolyam

36

FileOutputStream

+FileOutputStream(name: String) {FileNotFoundException}+FileOutputStream(file: File) {FileNotFoundException}+FileOutputStream(name: String, append: boolean) +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}...

Page 37: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Példa – Állomány másolása37

� 1. megoldás – bevitel és kivitel bájtonként

Page 38: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Példa – Állomány másolása38

� 2. megoldás – bevitel és kivitel egy adagban

3. megoldás – biztonságos lezárás� 3. megoldás – biztonságos lezárás

Page 39: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

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� Absztrakt ősei: Reader, Writer

� Pl.: FileReader, FileWriter

Page 40: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Reader40

� Összes beviteli karakterfolyam absztrakt őse

� Metódusok

� int read() throws IOException

� int read(char[] cbuf) throws IOException� int read(char[] cbuf) throws IOExceptionabstract 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

Page 41: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Writer41

� Összes kiviteli karakterfolyam absztrakt őse

� Metódusok

� void write(int c) throws IOException

� void write(char[] cbuf) throws IOException� void write(char[] cbuf) throws IOExceptionabstract void write(char[] cbuf, int off, int len)

throws IOException

� void write(String str) throws IOExceptionvoid write(String str, int off, int len)

throws IOException

� abstract void flush() throws IOException

� abstract void close() throws IOException

Page 42: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Szöveges állomány42

� Csak olvasható karaktereket tartalmazó állomány

� Sorokból áll, a sorok pedig karakterekből

� Soros szervezésű

� Logikai szerkezet� Logikai szerkezet

Page 43: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Szöveges állomány43

� Á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 � 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

Page 44: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

FileReader - állományból olvasó karakterfolyam

44

FileReader

+FileReader(fileName: String) {FileNotFoundException}+FileReader(file: File) {FileNotFoundException}+read():int {IOException}+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}...

Page 45: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

FileWriter - állományba író karakterfolyam

45

FileWriter

+FileWriter(fileName: String) {FileNotFoundException}+FileWriter(file: File) {FileNotFoundException}+FileWriter(fileName: String, append:boolean)

{FileNotFoundException}{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}...

Page 46: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Példa – Állomány bővítés46

Page 47: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

PrintWriter47

� 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(newFileWriter("print.txt"));writer.println("Double: "+12.78);writer.print('A');writer.println(new Integer(66));writer.close();

Page 48: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

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� 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

Page 49: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Bájtfolyamok49

Page 50: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Interfészek50

� 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� String readUTF() throws IOException

� DataOutput interfész (primitív adat / String � bájt) � void write(int b) throws IOException

void write(byte[] b) throws IOExceptionvoid write(byte[] b, int off, int len) throws IOException

� void writeBoolean(boolean v) throws IOExceptionvoid writeByte(int v) throws IOException

� …� void writeBytes(String s) throws IOException

void writeChars(String s) throws IOException

Page 51: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

DataInputStream/DataOutputStream51

� DataInputStream

� Beviteli szűrő adatfolyam

� Csak egy másik bájtfolyamból tud olvasni

� bájt � primitív adat / String konverzió

� Konstruktor:� 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)

Page 52: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

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

Page 53: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Pufferező folyam53

� 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� 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)

Page 54: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Pufferező folyam54

BufferedReader, BufferedWriter

� Karakterfolyamot pufferező beviteli/kiviteli folyam

� Konstruktorok� BufferedReader(Reader in)

BufferedReader(Reader in, int size)BufferedReader(Reader in, int size)

� BufferedWriter(Writer out)BufferedWriter(Writer out, int size)

Page 55: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Pufferező folyam55

Page 56: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Példa – Adatok kiírása56

FileOutputStream os1 = new FileOutputStream("adatok.dat");BufferedOutputStream os2 = new BufferedOutputStream(os1);DataOutputStream os3 = new DataOutputStream(os2);

/* Szebben:DataOutputStream os3 = new DataOutputStream(newDataOutputStream os3 = new DataOutputStream(newBufferedOutputStream(new

FileOutputStream("adatok.dat")));*/os3.writeInt(12);os3.writeChar('a');os3.writeFloat(5.2F);os3.writeBoolean(true);os3.close();

Page 57: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Példa – Adatok visszaolvasása57

FileInputStream is1 = new FileInputStream(fájl);BufferedInputStream is2 = new BufferedInputStream(is1);DataInputStream is3 = new DataInputStream(is2);/* Szebben:

DataInputStream is3 = new DataInputStream(newBufferedInputStream(newBufferedInputStream(new

FileInputStream("adatok.dat")));*/int i = is3.readInt();char c = is3.readChar();float f = is3.readFloat();boolean b = is3.readBoolean();is3.close();

Page 58: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Példa58

Page 59: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Objektumfolyam (object stream)59

� Írás/olvasás egysége:� primitív adat vagy

� szerializálható objektum

� SzerializációObjektum � bájtfolyam� Objektum � bájtfolyam

� Előnye: objektumok perzisztensen eltárolhatók

� Írás� objektum � bájtfolyam

� ObjectOutputStream

� Olvasás� bájtfolyam � objektum

� ObjectInputStream

Page 60: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Bájtfolyamok60

Page 61: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

ObjectOutputStream61

Page 62: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

ObjectInputStream62

Page 63: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

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� 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)

Page 64: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

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� 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

Page 65: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

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

65

� Í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!

Page 66: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

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

66

Page 67: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

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

67

Page 68: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Transient68

� Ha azt szeretnénk, hogy egy példányadat ne kerüljön stream-re, akkor az adatot transientmódosítóval kell ellátnunk

� A transient jelentése: múlandó, átmeneti� 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

Page 69: JAVA PROGRAMOZÁS - emte.siculorum.ropallaszlo/java/eloadas/7.Eloadas.pdf · 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

Könyvészet69

� 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.2011.