JAVA. Vstup a výstup

Podobné dokumenty
JAVA. Vstup a výstup

JAVA. Vstup a výstup

InputStream. FilterInputStream

Práce se soubory v Javě

6. PRÁCE S DATOVÝMI PROUDY

Seminář Java VI p.1/33

UNIVERZITA PARDUBICE. Fakulta elektrotechniky a informatiky. Aplikace tříd souvisejících s přenosem dat mezi operační pamětí a diskem Marek Jelínek

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

8. přednáška: Soubory a proudy

Soubor jako posloupnost bytů

Proudy, Zpracovсnэ XML. Radek Koэ

Úvod do programovacích jazyků (Java)

Textové soubory. alg9 1

14. Vstupy a výstupy v Javě

Vstup/Výstup, Sokety. Duben 2012

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

JAVA. Krátce o Reflection API

1. Téma 12 - Textové soubory a výjimky

Vstupy a výstupy strana 125

Design time - vytváří se program - metadata - vytváří se např. třída. Run time - běh programu - ukládá se do paměti počítače - vytváří se např.

Programování v jazyku Java soubory a proudy

Podmínky na zápočet. Java, zimní semestr

Programování v Javě I. Leden 2008

Java a XML. 10/26/09 1/7 Java a XML

Programování v Javě I. Únor 2009

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Iterator & for cyklus

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Úvod do programovacích jazyků (Java)

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

KTE / ZPE Informační technologie

Typický prvek kolekce pro české řazení

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Teoretické minimum z PJV

C# - I/O, streamy, práce se soubory

Úvod Informace o prostředí Práce se soubory Regulární výrazy Konec. Programování v C# Soubory a regulární výrazy. Petr Vaněček 1 / 27

typová konverze typová inference

Z. Kotala, P. Toman: Java ( Obsah )

GUI. Systémová integrace pro desktopové aplikace

Ošetřování chyb v programech

Algoritmizace a programování

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Regulární výrazy. Vzory

Soubory. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 12 A0B36PR1 Programování 1

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

Soubory. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 12 A0B36PR1 Programování 1

Abstraktní datové typy: zásobník

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Java Cvičení 05. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Výjimky. v C# a Javě

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 19.2.

Algoritmizace a programování. Terminálový vstup a výstup

Programovací jazyk Java

Java Výjimky Java, zimní semestr

Práce se soubory. Základy programování 2 Tomáš Kühr

Java a národní prostředí

Programovací jazyk Java

SOUBORY, VSTUPY A VÝSTUPY

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

KTE / ZPE Informační technologie

Generické programování

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Konstruktory překladačů

Java Enum Java, zimní semestr ,2017 1

Java - výjimky. private void vstup() throws IOException {... }

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

Výjimky a soubory. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Jazyk C# (seminář 5)

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

RMI Remote Method Invocation

Výjimky a soubory. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Část I Výjimky. Část 1 Výjimky. Výjimky a soubory. Část 2 Soubory. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Práce se soubory. Úvod do programování 2 Tomáš Kühr

8 Třídy, objekty, metody, předávání argumentů metod

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Principy objektově orientovaného programování

APNVZ_10. Dekorátor - Decorator Stav - State

20. Projekt Domácí mediotéka

JAVA. Java Micro Edition

7. Datové typy v Javě

Úvod do programování 8. hodina

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Úvod do programování - Java. Cvičení č.4

Java Řetězce Java, zimní semestr

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Vláknové programování část V

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

3 KTE / ZPE Informační technologie

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2

SW_10. Dekorátor - Decorator Stav - State

JAVA Moduly Java, letní semestr 2018

JAVA. Další jazyky kompilovatelné do Java byte-code

7. Dynamické datové struktury

Transkript:

JAVA Vstup a výstup 1

Přehled balík java.io základní vstup a výstup "streams" bytes od JDK1.1 Reader a Writer chars (Unicode) balík java.nio od JDK1.4 channels, buffers zvýšení výkonu třídy z java.io uvnitř přeimplementovány pomocí java.nio java.io.console od JDK 6 přístup k textové konzoli (pokud existuje) NIO.2 od JDK 7 zejména balík java.nio.file operace se soubory, procházení stromů,... 2

java.io File 3

java.io.file reprezentuje cestu cesta nemusí nutně existovat použití manipulace se soubory a adresáři získávání informací testování existence vytváření, mazání... String[] list() File[] listfiles() výpis adresáře setříděný 4

FilenameFilter String[] list(filenamefilter f) File[] listfiles(filenamefilter f) omezený výpis adresáře vracená jména musí projít filtrem public interface FilenameFilter { boolean accept(file dir, String name); } accept vrací true, pokud daný soubor má být zahrnut ve výpisu 5

Informace o souborech String getabsolutepath() cesta k souboru začínající v kořenovém adresáři boolean canread() boolean canwrite() String getparent() File getparentfile() vrací nadřazený adresář nebo null String getpath() vrací cestu jako String long length() boolean exists() boolean isfile() boolean isdirectory() 6

Vytváření a mazání boolean mkdir() vytvoří adresář jen poslední v cestě nadřazené musejí existovat boolean mkdirs() vytvoří adresář včetně neexistujících nadřazených boolean renameto(file f) přejmenování zda lze přesunout soubor jinam záleží na OS boolean delete() smaže soubor nebo adresář void deleteonexit() smaže soubor nebo adresář při ukončení JVM 7

Vytváření a mazání boolean createnewfile() atomicky vytvoří nový soubor jen pokud neexistoval static File createtempfile(string prefix, String suffix) vytvoří dočasný soubor (v adresáři pro dočasné soubory) prefix musí být aspoň 3 znaky (suffix může být null) static File createtempfile(string prefix, String suffix, File dir) vytvoří dočasný soubor v daném adresáři dočasné soubory se při zavření nebo ukončení JVM nemažou 8

Nové metody v JDK 6 boolean canexecute() test, zda je soubor spustitelný boolean setreadable(boolean readable) boolean setreadable(boolean readable, boolean owneronly) boolean setwritable(boolean writable) boolean setwritable(boolean writable, boolean owneronly) boolean setexecutable(boolean executable) boolean setexecutable(boolean executable, boolean owneronly) nastaví práva 9

Atributy na java.io.file static String pathseparator static char pathseparatorchar oddělovač cest static String separator static char separatorchar oddělovač souborů v cestě 10

java.io Streams 11

Přehled od JDK1.0 InputStream int read() čte jeden byte ze vstupu (na konci vstupu vrací -1) int read(byte[] b) čte několik bytů do pole (vrací počet načtených bytů nebo -1) OutputStream void write(int b) void write(byte[] a) všechny další třídy pro čtení/zápis jsou odvozeny od InputStream/OutputStream používají se potomci InputStream a OutputStream jsou abstract 12

Vstupní streamy ByteArrayInputStream čte z buferu v paměti StringArrayInputStream konvertuje řetězce na vstupní stream FileInputStream čte ze souboru PipedInputStream "čtecí" konec roury předávání dat mezi vlákny SequenceInputStream spojení více vstupních streamů do jednoho mají jen základní metody read() čtení po bytech 13

Výstupní streamy ByteArrayOutputStream zapisuje do buferu v paměti FileOutputStream zapisuje do souboru PipedOutputStream "zapisovací" konec roury předávání dat mezi vlákny není StringArrayOutputStream použije se ByteArrayOutputStream mají jen základní metody write() zápis po bytech 14

Filtry FilterInputStream FilterOutputStream abstraktní třídy mnoho potomků pomocí filtrů se přidává další funkcionalita k základním streamům filtr dostane při vytvoření stream jako parametr data se čtou/zapisují přes filtr základní streamy se používají téměř vždy přes nějaký filtr filtry lze aplikovat přes sebe více filtru nad jedním streamem 15

Druhy filtrů DataOutputStream definuje metodu write pro všechny primitivní typy DataInputStream definuje metodu read pro všechny primitivní typy čte data ve formátu, v jakém je zapsal DataOutputStream formát dat nezávislý na platformě BufferedInputStream BufferedOutputStream nepřidávají nové čtecí/zapisovací metody vstup/výstup bude bufrovaný normálně není lze zadat kapacitu buferu 16

Druhy filtrů LineNumberInputStream informace, za kterého řádku se čte PushbackInputStream umožňuje "vrátit" data na vstup 17

Druhy filtrů PrintStream zapisuje data zobrazitelným způsobem DataOutputStream zapisuje data tak, aby šla přečíst pomocí DataInputStream definuje metody print() a println() pro "všechny" typy metoda printf() jako printf v C metoda flush() zapíše buffer do streamu pod PrintStreamem PrintStream je automaticky bufferován flush() se volá automaticky při zápisu konce řádku lze v konstruktoru nastavit autoflush po každém zápisu metody nevyhazují IOException metoda checkerror() 18

Používání vrstvení filtrů nad základní vstupem/výstupem DataInputStream di = new DataInputStream( new BufferedInputStream ( new FileInputStream("file.txt"))); int a = di.readint(); long b = di.readlong(); DataOutputStream ds = new DataOutputStream( new BufferedOutputStream ( new FileOutputStream("file.txt"))); ds.writeint(100); ds.writelong(1234l); 19

java.io Reader & Writer 20

Přehled od JDK1.1 znakově-orientovaný vstup a výstup znak = 2 byty streamy stále zůstávají nejsou deprecated některé ano Reader definuje metodu read pro čtení znaků a pole znaků Writer definuje metodu write pro zápis znaků, pole znaků a řetězců Reader i Writer abstraktní třídy InputStreamReader, OutputStreamWriter vytvoření Readeru/Writeru ze streamu 21

Druhy vstupu/výstupu obdobné jako u streamů InputStream Reader InputStreamReader OutputStream Writer OutputStreamWriter FileInputStream FileReader FileOutputStream FileWriter StringBufferInputStream StringReader - StringWriter ByteArrayInputStream CharArrayReader ByteArrayOutputStream CharArrayWriter PipedInputStream PipedReader PipedOutputStream PipedWriter 22

Filtry opět obdobné jako u streamů FilterInputStream FilterOutputStream BufferedInputStream BufferedOutputStream PrintStream LineNumberInputStream PushbackInputStream FilterReader FilterWriter BufferedReader BufferedWriter PrintWriter LineNumberReader PushbackReader 23

java.io RandomAccessFile 24

Přehled čtení a zápis záznamů ze souboru pohyb po souboru mimo hierarchii tříd streamů implementuje interface DataInput a DataOutput tyto interface implementují DataInputStream resp. DataOutputStream metody read a write pro primitivní typy otevírá soubor buď na čtení nebo na čtení i zápis parametr konstruktoru "r" nebo "rw" 25

java.nio Nový vstup a výstup 26

Přehled "new I/O" od JDK1.4 zvýšení výkonu přiblížení strukturám vstupu/výstupu v OS třídy z java.io přeimplementovány pomocí tříd z java.nio definuje channels a buffers s kanálem se komunikuje pouze přes bufer FileInputStream, FileOutputStream a RandomAccessFile nová metoda FileChannel getchannel() java.nio.channels.channels metody pro vytváření Readerů a Writerů z kanálů 27

Používání java.nio.bytebuffer jediná možnost jak komunikovat s kanálem FileChannel fc = new FileOutputStream("data.txt").getChannel(); fc.write(bytebuffer.wrap("some text ".getbytes())); fc.close(); fc = new FileInputStream("data.txt").getChannel(); ByteBuffer buff = ByteBuffer.allocate(1024); fc.read(buff); buff.flip(); while(buff.hasremaining()) System.out.print((char)buff.get()); 28

Vytváření buferu ByteBuffer.wrap(byte[] b) statická metoda z pole bytů udělá bufer bufer je s polem stále svázaný kapacita buferu = b.length ByteBuffer.allocate(int capacity) statická metoda alokuje prázdný bufer s danou kapacitou ByteBuffer.allocateDirect(int capacity) statická metoda alokovaný bufer je "více" svázán s OS používání buferu by mělo být rychlejší záleží na OS 29

Buffer kapacita kolik prvků bufer obsahuje nelze ji zvětšovat limit index prvního prvku, který nebude zapisován nebo čten nikdy není větší než kapacita pozice index prvního prvku, který bude zapisován nebo čten při další operaci nikdy není vetší než limit pozice limit kapacita 30

Buffer: metody flip() nastaví limit na současnou pozici a pozici nastaví na 0 clear() nastaví limit na kapacitu a pozici nastaví na 0 mark() nastaví značku na aktuální pozici reset() nastaví pozici na značku neruší značku rewind() nastaví pozici na 0 a zruší značku 31

Kopírování mezi kanály metody transferto() a transferfrom() public static void main(string[] args) throws Exception { FileChannel in = new FileInputStream(args[0]).getChannel(), out = new FileOutputStream(args[1]).getChannel(); in.transferto(0, in.size(), out); } // nebo: // out.transferfrom(in, 0, in.size()); 32

Používání buferu "pohledy" na bufer (views) čtení a zapisování primitivních typů metody na ByteBuffer ascharbuffer() asdoublebuffer() asfloatbuffer() asintbuffer() aslongbuffer() ByteBuffer bb = ByteBuffer.allocate(1024); bb.asintbuffer().put(1234); System.out.println(bb.getInt()); 33

Endian implicitně ByteBuffer používá pro data velký endian lze změnit na malý endian metoda order(byteorder b) třída ByteOrder ma dva statické atributy typu ByteOrder BIG_ENDIAN LITTLE_ENDIAN 34

Soubory mapované do paměti přístup k souboru jako k poli v paměti metoda na kanálu MappedByteBuffer map() public class LargeMappedFiles { static int length = 0x8FFFFFF; // 128 Mb public static void main(string[] args) throws Exception { MappedByteBuffer out = new RandomAccessFile("test.dat", "rw").getchannel().map(filechannel.mapmode.read_write, 0, length); for(int i = 0; i < length; i++) out.put((byte)'x'); } } for(int i = length/2; i < length/2 + 6; i++) System.out.print((char)out.get(i)); 35

Zamykání souborů FileOutputStream fos = new FileOutputStream("file.txt"); FileLock fl = fos.getchannel().trylock(); if (fl!= null) { System.out.println("Soubor zamknut"); Thread.sleep(100); fl.release(); System.out.println("Soubor odemknut"); } fos.close() přesné chování zámků závisí na OS lze zamknout jen část souboru metoda lock() čeká dokud zámek nedostane metoda trylock() nečeká 36

java.io Console 37

Console přístup ke (znakové) konzoli ne vždy může fungovat System.console() získání konzole Console printf(string format, Object... args) obdoba printf() v Ccku String readline() vrací jeden načtený řádek (bez znaku konce řádku) char[] readpassword() vrací jeden načtený řádek (bez znaku konce řádku) zadávané znaky nejsou zobrazovány Reader reader() PrintWriter writer() vrací reader/writer asociovaný s konzolí 38

Vstup a výstup Komprese 39

Přehled balík java.util.zip komprese pomocí filtrů FilterInputStream a FilterOutputStream CheckedInputStream, CheckedOutputStream poskytují kontrolní součet čtených/zapisovaných dat InflaterInputStream, DeflaterOutputStream zakladní třídy pro kompresi a dekompresi GZIPInputStream, GZIPOutputStream komprese ve formátu GZIP ZipInputStream, ZipOutputStream komprese ve formátu ZIP 40

GZIP komprimace jednoho souboru kompatibilní s UNIXouvými programy gzip a gunzip BufferedInputStream in = new BufferedInputStream( new FileInputStream(args[0])); BufferedOutputStream out = new BufferedOutputStream( new GZIPOutputStream( new FileOutputStream("test.gz"))); int c; while((c = in.read())!= -1) out.write(c); in.close(); out.close(); 41

ZIP komprimace více souboru do jednoho archivu kompatibilní se ZIP programy vytváření archivu ZipOutputStream metoda putzipentry(zipentry ze) další soubor do archivu třída ZipEntry jméno souboru informace o souboru (velikost před kompresí a po, komentář, kontrolní součet,...) čtení z archivu ZipInputStream metoda getnextentry() ZipFile metoda entries() - vrací Enumeration 42

ZIP ZipOutputStream zos = new ZipOutputStream( new BufferedOutputStream( new FileOutputStream("test.zip"))); zos.setcomment("testovaci ZIP"); for(int i = 0; i < args.length; i++) { System.out.println("Ukladam soubor: " + args[i]); BufferedInputStream in = new BufferedInputStream( new FileInputStream(args[i])); zos.putnextentry(new ZipEntry(args[i])); int c; while((c = in.read())!= -1) zos.write(c); in.close(); } zos.close(); 43

JAR balík java.util.jar jar archivy formát ZIP souborů navíc MANIFEST.MF soubor JarInputStream, JarOutputStream potomci ZipInputStream a ZipOutputStream JarInputStream ma navíc metody getmanifest() JarEntry potomek ZipEntry získávání atributů Manifest reprezentace MANIFEST.MF souboru 44

Vstup a výstup NIO.2 (od JDK 7) 45

java.nio.files Path reprezentace cesty obdoba java.io.file lze konvertovat File.toPath() více možností než File porovnávání cest equals(), startswith(), endswith() relativizování Path p1 = Paths.get("joe"); Path p2 = Paths.get("sally"); Path p1_to_p2 = p1.relativize(p2); // ->../sally získávání skutečné cesty ze symlinku torealpath() 46

java.nio.files Files pouze statické metody copy() CopyOptions REPLACE_EXISTING COPY_ATTRIBUTES NOFOLLOW_LINKS move() CopyOptions ATOMIC_MOVE REPLACE_EXISTING delete(), deleteifexists() byte[] readallbytes(path p) Path write(path path, byte[] bytes, OpenOption... options) Path write(path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options) 47

java.nio.files Files (pokračování) BufferedReader newbufferedreader(path p, Charset cs) BufferedWriter newbufferedwriter(path p, Charset cs, OpenOption... opts) InputStream newinputstream(path p, OpenOption... opts) OutputStream newoutputstream(path p, OpenOption... opts) SeekableByteChannel newbytechannel(path p, OpenOption... opts) Path createlink(path link, Path existing) Path createsymboliclink(path link, Path target, FileAttribute<?>... attrs) 48

java.nio.files Files (pokračování) testovací metody isdirectory() isregularfile() is...() 49

java.nio.files procházení stromu Path walkfiletree(path start, FileVisitor<? super Path> visitor) metoda na Files interface FileVisitor<T> FileVisitResult previsitdirectory(t dir, BasicFileAttributes attrs) FileVisitResult postvisitdirectory(t dir, IOException exc) FileVisitResult visitfile(t file, BasicFileAttributes attrs) FileVisitResult visitfilefailed(t file, IOException exc) 50

java.nio.files příklad smazání celého stromu Path start =... Files.walkFileTree(start, new SimpleFileVisitor<Path>() { public FileVisitResult visitfile(path f, BasicFileAttributes attrs) throws IOException { Files.delete(file); return FileVisitResult.CONTINUE; } public FileVisitResult postvisitdirectory(path dir, IOException e) throws IOException { if (e == null) { Files.delete(dir); return FileVisitResult.CONTINUE; } else { throw e; } } }); 51

Java, zimní semestr Verze prezentace 2014 J06.cz.2014.01 Tato prezentace podléhá licenci Creative Commons Uveďte autora-neužívejte komerčně 4.0 Mezinárodní License. 52