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

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

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

Úvod do programovacích jazyků (Java)

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э

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

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

14. Vstupy a výstupy v Javě

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

Iterator & for cyklus

Programování v jazyku Java soubory a proudy

Úvod do programovacích jazyků (Java)

KTE / ZPE Informační technologie

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

GUI. Systémová integrace pro desktopové aplikace

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

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

Typický prvek kolekce pro české řazení

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

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

Programování v Javě I. Leden 2008

typová konverze typová inference

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

Algoritmizace a programování

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

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

Regulární výrazy. Vzory

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

Ú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

Vstup/Výstup, Sokety. Duben 2012

JAVA. Krátce o Reflection API

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

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

Abstraktní datové typy: zásobník

Java Enum Java, zimní semestr ,2017 1

KTE / ZPE Informační technologie

Java Výjimky 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

Jazyk C# (seminář 5)

Ošetřování chyb v programech

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

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

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

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

Teoretické minimum z PJV

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

Java a národní prostředí

Výjimky. v C# a Javě

Konstruktory překladačů

SOUBORY, VSTUPY A VÝSTUPY

Generické programování

Datové struktury. alg12 1

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

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

APNVZ_10. Dekorátor - Decorator Stav - State

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

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

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/

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

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

ADT/ADS = abstraktní datové typy / struktury

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

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

PREPROCESOR POKRAČOVÁNÍ

RMI Remote Method Invocation

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

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

Java Řetězce Java, zimní semestr

SW_10. Dekorátor - Decorator Stav - State

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

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

Principy objektově orientovaného programování

20. Projekt Domácí mediotéka

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

Programovací jazyk Java

Vstupní a vstupní proudy v C++

Seminář Java IV p.1/38

Výčtový typ strana 67

3 KTE / ZPE Informační technologie

7. Dynamické datové struktury

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

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

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

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

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 RandomAccessFile 27

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

java.nio NIO 29

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ů 30

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

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 32

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 33

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 34

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

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

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 37

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

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

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

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

java.io Console 42

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

Vstup a výstup Komprese 44

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 45

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

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 47

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

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