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

Úvod do programovacích jazyků (Java)

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

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

Soubor jako posloupnost bytů

Textové soubory. alg9 1

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

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

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

Proudy, Zpracovсnэ XML. Radek Koэ

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

Vstupy a výstupy strana 125

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

Iterator & for cyklus

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

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

14. Vstupy a výstupy v Javě

GUI. Systémová integrace pro desktopové aplikace

Programování v jazyku Java soubory a proudy

Úvod do programovacích jazyků (Java)

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

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

KTE / ZPE Informační technologie

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

Algoritmizace a programování

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

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

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

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

KTE / ZPE Informační technologie

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

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

Typický prvek kolekce pro české řazení

Vstup/Výstup, Sokety. Duben 2012

Programování v Javě I. Leden 2008

Java Výjimky Java, zimní semestr

Ú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

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

typová konverze typová inference

Ošetřování chyb v programech

Jazyk C# (seminář 5)

Java Enum Java, zimní semestr ,2017 1

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

JAVA. Krátce o Reflection API

Teoretické minimum z PJV

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

Výjimky. v C# a Javě

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

SOUBORY, VSTUPY A VÝSTUPY

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

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

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

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

RMI Remote Method Invocation

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

Java a národní prostředí

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

Konstruktory překladačů

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

Java Řetězce Java, zimní semestr

Projekty pro výuku programování v jazyce Java

APNVZ_10. Dekorátor - Decorator Stav - State

Generické programování

Návrh softwarových systém. Návrh softwarových systémů

Datové struktury. alg12 1

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

SW_10. Dekorátor - Decorator Stav - State

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/

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

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

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

Druhy souborů. textové. binární. nestrukturované txt strukturované - ini, xml, csv. veřejné bmp, jpg, wav proprietární docx, cdr, psd

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

7. Dynamické datové struktury

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

ADT/ADS = abstraktní datové typy / struktury

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

PREPROCESOR POKRAČOVÁNÍ

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

Zápis programu v jazyce C#

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

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

PB161 Programování v C++ Proudy pro standardní zařízení Souborové proudy Paměťové proudy Manipulátory

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

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

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

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

Principy objektově orientovaného programování

20. Projekt Domácí mediotéka

Novinky v OpenJDK 7. Novinky v OpenJDK7 Pavel Tišnovský 1

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

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

Vstup a výstup Path 3

Path java.nio.file.path interface reprezentuje cestu na filesystému získání cesty Paths.get(String first, String... more) statická metoda př. Path p = Paths.get("home", "petr", "text.txt"); FileSystems.getDefault().getPath(String first, String... more) Path.get() pracuje s defaultním filesystémem 4

Path metody porovnávání cest equals(..), startswith(..), endswith(..) relativizování cesty 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() Path implementuje Iterable<Path> iterování přes komponenty normalize() odstranění zbytečných částí cesty d1/././d2/ => d1/d2... 5

Path sledování změn WatchKey register(watchservice watcher, WatchEvent.Kind<?>... events) WatchService watchservice = FileSystems.getDefault().newWatchService(); WatchKey key = this.path.register(watchservice, ENTRY_CREATE, ENTRY_DELETE); while (true) { for (WatchEvent<?> l : key.pollevents()) {... } boolean valid = key.reset(); if (!valid) { } } 6

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

CopyOptions, OpenOptions,... interface používáno v metodách na Files implementace StandardCopyOptions enum (ATOMIC_MOVE, COPY_ATTRIBUTES,...) StandardOpenOptions enum (APPEND, READ, WRITE,...) LinkOptions enum (NOFOLLOW_LINKS) 8

java.nio.file.files (pokračování) Path createlink(path link, Path existing) Path createsymboliclink(path link, Path target, FileAttribute<?>... attrs) createdirectory(path dir, FileAttribute<?>... attrs) createdirectories(path dir, FileAttribute<?>... attrs) createfile(path path, FileAttribute<?>... attrs) createtempfile(string prefix, String suffix, FileAttribute<? >... attrs) createtempfile(path dir, String prefix, String suffix, FileAttribute<?>... attrs) testovací metody isdirectory() isregularfile() is...() 9

java.nio.file.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) 10

java.nio.file 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; } } }); 11

java.io.file od Java 1.0 java.nio.files.path od Java 7 java.io.file není deprecated používá se na mnoha místech v std knihovně také reprezentuje cestu obdobné použití jako Path Path má více možností lze mezi sebou převádět File.toPath() Path.toFile() 12

Oddělovače cest / souborů 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ě metoda na java.nio.file.filesystem String getseparator() 13

java.io Streams 14

Přehled od Java 1.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 15

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 16

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 17

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 18

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 19

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

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

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); 22

java.io Reader & Writer 23

Přehled od Java 1.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 24

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 25

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

java.io Zpracování výjimek 27

Výjimky skoro vše v java.io vyhazuje IOException potomek od Exception nutno odchytit/deklarovat streamy a readery/writery implementují AutoCloseable vždy používat rozšířený try 28

Kopírování souboru try (InputStream is = new FileInputStream(finNm); OutputStream os = new FileOutputStream(foutNm)) { int c; while ((c = is.read())!= -1) { os.write(c); } } catch (IOException ex) { //... } SPRÁVNĚ InputStream is; OutputStream os; try { is = new FileInputStream(finNm); os = new FileOutputStream(foutNm); int c; while ((c = is.read())!= -1) { os.write(c); } os.close(); is.close(); } catch (IOException ex) { //... } ŠPATNĚ 29

java.io RandomAccessFile 30

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" 31

java.nio NIO 32

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 (stream a reader/writer) 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ů 33

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()); 34

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 35

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 36

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 37

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()); 38

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()); 39

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 40

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)); 41

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á 42

Vstup a výstup...ještě zpět k Path/Files 43

Otevírání souborů/adresářů metody na Files 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) DirectoryStream<Path> newdirectorystream(path dir)... 44

java.io Console 45

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í 46

Vstup a výstup Komprese 47

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 48

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(); 49

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 50

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(); 51

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