Balíček java.io. je rozsáhlý, obecně koncipovaný, slouží ke vstupu, výstupu a přenosu dat.



Podobné dokumenty
Programování v jazyku Java soubory a proudy

6. PRÁCE S DATOVÝMI PROUDY

Práce se soubory v Javě

InputStream. FilterInputStream

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

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

Úvod do programovacích jazyků (Java)

Proudy, Zpracovсnэ XML. Radek Koэ

14. Vstupy a výstupy v Javě

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

Seminář Java VI p.1/33

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

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

Soubor jako posloupnost bytů

Typický prvek kolekce pro české řazení

Vstupy a výstupy strana 125

Algoritmizace a programování

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

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

Teoretické minimum z PJV

Textové soubory. alg9 1

Třídy a objekty -příklady

Úvod do programovacích jazyků (Java)

Programování v Javě I. Leden 2008

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

Vstup/Výstup, Sokety. Duben 2012

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

Ošetřování chyb v programech

Úvod Jednoduchá komunikace Sockety Konec. Programování v C# Síťová komunikace. Petr Vaněček 1 / 33

Vytváření a použití knihoven tříd

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

PREPROCESOR POKRAČOVÁNÍ

RMI Remote Method Invocation

Java Výjimky Java, zimní semestr

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

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

20. Projekt Domácí mediotéka

JAVA. Ještě k funkcionálnímu programování (pokračování z předchozí přednášky)

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Í

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

16. února 2015, Brno Připravil: David Procházka

Jazyk C# (seminář 5)

Java a národní prostředí

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

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

JAVA. Ještě k funkcionálnímu programování (pokračování z předchozí přednášky)

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

Programování v jazyku Java Dokumentace, logování, regex

Java a Caché IV: Manipulace s objekty

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

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

Zápis programu v jazyce C#

Principy objektově orientovaného programování

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

SOUBORY, VSTUPY A VÝSTUPY

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

Ú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

Java Řetězce Java, zimní semestr

11. Dědičnost. Dědičnost strana 103

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

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

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Distribuované systémy a výpočty

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

Abstraktní datové typy: zásobník

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

KTE / ZPE Informační technologie

JAVA. Java Micro Edition

Java Enum Java, zimní semestr ,2017 1

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

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

1. Programování, typy programovacích jazyků, historie.

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Programovací jazyk Java

KTE / ZPE Informační technologie

JAVA. Krátce o Reflection API

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

BlueJ a základy OOP. Programování II 1. cvičení Alena Buchalcevová

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

VISUAL BASIC. Práce se soubory

Regulární výrazy. Vzory

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

Case Studie. Ing. Tomáš Černý M.S.C.S.

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

Seminář Java II p.1/43

Výjimky. v C# a Javě

Technologie JavaBeans

7. Datové typy v Javě

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

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/

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

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

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

Jazyk C# (seminář 3)

JSR tutorial 2 Transformace v JSR-184

X-komponenty 3.1. Uživatelská příručka. J. Kocman, V. Trojan

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Úvod do Javy, JDBC a multimediální databáze

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

Transkript:

Balíček java.io je rozsáhlý, obecně koncipovaný, slouží ke vstupu, výstupu a přenosu dat. Jeho hlavní součástí jsou třídy realizující tzv. proudy bytů resp. znaků ( byte resp. character streams ). Tyto třídy jsou potomky čtyř abstraktních tříd:, OutputStream resp. Reader, Writer. Proudy se otvírají automaticky neexistují metody open. Proudy se však automaticky neuzavírají je třeba volat metodu close( ). V návaznosti s dalšími balíčky java.io podporuje: java.net - přenos po síti java.util.zip - standardní komprese dat java.util.jar - standardní komprese dat - obvykle s manifestem java.nio - inovované I/O umožňuje jemněji pracovat na úrovni kanálů. PJV05 1

Proudění dat SOURCE INPUT OUTPUT SINK ZDROJ READ PROCESS NORA WRITE bytes chars buffer buffer chars bytes soubor paměť roura síť konzole byte číslo znak řádka objekt soubor paměť roura síť konzole PJV05 2

Třída File Objekt typu File představuje soubor resp. adresář nikoli vlastní data na lokálním disku. Umožňuje přístup, informace, manipulace a cestu absolutníči relativní k pracovnímu adresáři ( začíná-li lomítkem či nikoli ). Konstruktory jen určují jen jméno, cestu případně i formou URI. Některé důležitější metody: boolean createnewfile( ) - vytvoří nový skutečný soubor pokud neexistuje boolean mkdir( ) - vytvoří skutečný adresář String getabsolutepath( ) - zjistí absolutní cestu boolean isdirectory( ), boolean isfile( ) - zjistí typ, neexistuje-li pak false String[ ] list( ) - vytvoří seznam souborů a podadresářů v adresáři boolean exists( ) - zjistí existenci boolean canread( ), boolean canwrite( ) - zjistí možnosti práce void delete( ) - zruší soubor nebo adresář long length( ) - zjistí rozsah souboru boolean renameto ( File name ) - přejmenuje soubor resp. adresář long lastmodified( ) - zjistíčas poslední modifikace PJV05 3

Třída File Vytvoření adresáře a souboru, zápis dat a přejmenování : File dir1 = new File( "C:\\K\\L" ); dir1.mkdirs( ); File file1 = new File( dir, "X.txt" ); file1.createnewfile( ); PrintWriter pw = new PrintWriter( file1 ); pw.println( "blablabla" ); pw.close( ); File dir2 = new File( "C:\\K\\M" ); dir1.renameto( dir2 ); File file2 = new File( dir2, "X.txt" ); File file3 = new File( dir2, "Y.txt" ); file2.renameto( file3 ); PJV05 4

Rekurzivní výpis adresáře static final String spc= " "; public static void main( String[ ] args ) { dir( null, "C:\\MyDir", 0 ); static void dir( File dir, String name, int level ) { File f = ( dir == null )? new File( name ) : new File( dir, name ); String inset = spc.substring( 0, level ); System.out.println( inset + name ); if ( f.isfile( ) ) return; String[ ] sl = f.list( ) ; for ( int i = 0; i < sl.length; i++ ) dir( f, sl[ i ], level+1 ); PJV05 5

java.lang Comparable<T> ObjectStream Field ObjectStream Class java.io File FileFilter File Descriptor tag interface Serializable Externalizable FilenameFilter Stream Tokenizer byte char Input Stream Reader input streams Closeable Output Stream Writer output DataInput Random AccessFile Console Flushable java.lang Appendable DataOutput PJV05 6

PJV05 7 Input Stream DataInput File Filter ByteArray Buffered Object Piped Inflater StringBuffer Data Zip Jar ObjectInput Sequence Digest java.security ProgressMonitor javax.swing Closeable java.util.zip Checked java.util.zip Cipher java.crypto GZIP Audio javax.sound.sampled ObjectStream Constants

Abstraktní třída Následující metody jsou public a vyhazují výjimku IOException: int available( ) vrací počet bytů, které lze číst nebo přeskočit bez blokování volajícího vlákna. void close( ) uzavře proud a uvolní příslušné zdroje. abstract int read( ) přečte další byte, vrátíčíslo 0 255či -1 (po konci). int read( byte[ ] b ) přečte sekvenci bytů do pole b. int read( byte[ ] b, int off, int len ) obdoba předchozí metody. void reset( ) nastaví proud na pozici udanou metodou mark( ). long skip( long n ) přeskočí n bytů. Následující metody jsou public: void mark( int readlimit ) poznamená pozici v proudu. boolean marksupported( ) zjišťuje zda repozice je podporována. PJV05 8

Čtení a zápis byte streamu int b 0 0 0 0 0 0 00-FF F F F F F F F F int b = read( ) 0 <= b <= 255 b == -1 EOF write( int b ); close( ); byte[ ] b int lng = read( byte[ ] b, ) 0 <= lng < b.length lng == -1 EOF b.length 0 write( byte[ ] b, ) ; close( ); PJV05 9

java.lang Readable Closeable java.nio Char Buffer Reader Reader Reader Buffered Reader Filter Reader Piped Reader CharArray Reader String Reader File Reader LineNumber Reader Pushback Reader PJV05 10

Čtení a zápis character streamu int c 0 0 0 0 00 00 - FFFF F F F F F F F F int c = read( ) 0 <= c <= 65535 c == -1 EOF write( c ); close( ); char[ ] c 0 int lng = read( char[ ] c, ) write( c, ) ; close( ); String s 0 <= lng < c.length lng == -1 EOF c.length write( s, ) ; close( ); PJV05 11

Abstraktní třída Reader Následující metody jsou public a vyhazují IOException: abstract void close( ) uzavře proud a uvolní příslušné zdroje. int read( ) přečte další znak, vrátí 0 65535 anebo -1 (při konci). int read( char[ ] c) přečte sekvenci znaků do pole b. abstract int read( char[ ] c, int off, int len ) obdoba předchozí metody. boolean ready( ) testuje připravenost ke čtení. void reset( ) nastaví proud na pozici udanou metodou mark( ). long skip( long n ) přeskočí n znaků. Následující metody jsou public void mark( int readaheadlimit ) poznamená pozici v proudu. boolean marksupported( ) zjišťuje zda repozice je podporována. K dispozici je navíc konstruktor protected Reader( Object lock ) pro synchronizaci kritických sekcí daného objektu. PJV05 12

Output Stream Closeable Flushable java.lang Appendable OutputStream File OutputStream Buffered OutputStream PrintStream org.omg.corba.portable Output Stream Filter OutputStream java.util.zip ByteArray OutputStream Data OutputStream Deflater OutputStream java.util.zip Piped OutputStream DataOutput GZIP OutputStream Checked OutputStream Object OutputStream ObjectOutput ObjectStream Constants Zip OutputStream Jar OutputStream java.security Digest OutputStream java.crypto Cipher OutputStream PJV05 13

Abstraktní třída OutputStream Následující metody jsou public a vyhazují výjimku IOException: void close( ) uzavře proud a uvolní příslušné zdroje. void flush( ) vypudí data do nory. abstract void write( int b ) zapíše obsah nejpravějšího byte do proudu. void write( byte[ ] b ) zapíše obsah pole do proudu dle jeho délky. void write( byte[ ], int offset, int len ) zapíše jen část obsahu. PJV05 14

java.lang Closeable Flushable Appendable Writer Writer OutputStream Writer Buffered Writer Filter Writer Piped Writer CharArray Writer String Writer Print Writer File Writer PJV05 15

Abstraktní třída Writer Následující metody jsou public a vyhazují výjimku IOException: abstract void close( ) uzavře proud a uvolní příslušné zdroje. abstract void flush( ) vypudí data do nory. abstract void write( int c ) zapíše obsah nejpravějšího znaku do proudu. void write( char[ ] c ) zapíše obsah pole do proudu dle jeho délky. void write( char[ ], int offset, int len ) zapíše jen část obsahu. void write( String s ) zapíše řetěz do pole. void write( String s, int offset, int len ) zapíše jen část řetězu. Writer append( char c ) připíše znak. Writer append( CharSequence csq ) připíše sekvenci znaků. Writer append( CharSequence csq, int start, int end ) připíše subsekv. K dispozici je navíc konstruktor protected Writer( Object lock ) pro synchronizaci kritických sekcí daného objektu. PJV05 16

Překlad bytů na znaky Reader a OutputStreamWriter slouží jako můstky mezi bytovými a znakovými proudy a dále pro volitelný překlad. Konstruktory: Reader( in) Reader( in, String enc ) s překladem OutputStreamWriter( OutputStream out ) OutputStreamWriter( OutputStream out, String enc ) s překladem Parametr enc udává kódování např. UTF8 Pro zvýšení efektivity radno používat buffery. Např.: Reader in = new BufferedReader( new Reader( System.in) ); Writer out = new BufferedWriter( new OutputStreamWriter( System.out) ); PJV05 17

Interfejsy DataInput a DataOutput definují (abstraktní) metody pro čtení / zápis všech primitivů z / do proudu: boolean readboolean( ), byte readbyte( ), char readchar( ), double readdouble( ),... atd. a ještě: - void readfully( byte[ ] b ) - int readunsignedbyte( ) - int readunsignedshort( ) - String readutf( ) void writeboolean( boolean v ), void writebyte( byte v ), void writechar( char v ), void writedouble( double v )... atd. a ještě: - void write( byte[ ] b ) - void writeutf( String s ) Třídy Data, DataOutputStream a RandomAccessFile tyto interfejsy implementují, čímž umějí pracovat se všemi primitivy. PJV05 18

Kopírování souboru po bytech Přetížené konstruktory File a FileOutputStream určují soubor pomocí File nebo FileDescriptor anebo přímo jménem. FileOutputStream navíc umožňuje připsat data ke konci existujícího souboru, což se určí parametrem append v konstruktoru. Příklad: try { File ifile = new File("C:\\in"); File ofile = new File("C:\\out"); File fis = new File( ifile ); FileOutputStream fos = new FileOutputStream( ofile ); int c; while ( ( c = fis.read( ) )!= -1 ) { fos.write(c); fis.close( ); fos.close( ); catch ( IOException ex ) { System.err.println( ex ); PJV05 19

Kopírování textového souboru po řádcích Přetížené konstruktory BufferedReader a BufferedWriter umožňují nastavit velikost bufru. Metoda readline( ) nevrací znaky přechodu na novou řádku. Writer umožňuje připisovat ke konci existujícího souboru metodou append. BufferedReader br = null; BufferedWriter bw = null; try { br = new BufferedReader( new Reader( new File( "C:\\in.txt" ))); bw = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( "C:\\out.txt" ))); String s = null; while ( (s = br.readline( ) )!= null ) { bw.write( s ); bw.newline( ); catch ( IOException ex ) { System.err.println( ex ); finally { if ( br!= null ) br.close( ); if ( bw!= null ) bw.close( ); PJV05 20

Filtrování textového souboru po řádcích class TextFilter extends LineNumberReader { String s, stop ; public TextFilter( BufferedReader in, String stop ) { super( in ); this.stop=stop; public String readline( ) { try { while ( (s=super.readline( ) )!= null ) { if ( s.length( ) == 0 ) continue; // odstraní prázdnéřádky if ( s.startswith( stop ) ) return null; // podmínka ukončení return s; catch ( Exception ex ) { return null; PJV05 21

Překlad souboru Přetížené konstruktory FileReader a FileWriter určují soubor pomocí File nebo FileDescriptor anebo přímo jménem. Kopírování souboru po znacích s překladem defaultního kódu do UTF8: public static void main( String[ ] args ) throws Exception { FileReader fr = new FileReader( "Test.txt" ); OutputStreamWriter osw = new OutputStreamWriter( new FileOutputStream( "Test.UTF8" ), "UTF8" ); int c; while ( (c = fr.read( ) )!= -1 ) osw.write( c ); fr.close( ); osw.close( ); PJV05 22

Proudění rourou Konstruktory ( nepřipojené se připojí později metodou connect( ) ): Piped( PipedOutputStream src ) Piped( ) ještě nepřipojený PipedOutputStream( Piped snk ) PipedOutputStream( ) ještě nepřipojený Příklad toku náhodných bytů rourou od producenta ke konzumentovi: class Producer extends Thread { OutputStream os; Producer( OutputStream os ) { this.os = os; public void run( ) { for ( int i = 0; i < 10; i++ ) try { os.write( (int) ( Math.random( ) * 256) ); catch ( IOException ex ) { PJV05 23

Proudění rourou class Consumer extends Thread { is; Consumer( is ) { this.is = is; public void run( ) { int i; try { while ( ( i = is.read( ) )!= -1 ) System.out.println( i ); catch ( IOException ex ) { class TestPipe { public static void main( String[ ] args ) throws Exception { Piped pi = new Piped( ); PipedOutputStream po = new PipedOutputStream( pi ); new Producer( po ).start( ); new Consumer( pi ).start( ); PJV05 24

Serializace výstupu Objekty implementující Serializable lze přenést objektovým proudem tzv. serializací, jež rozloží hodnoty jeho (nestatických) atributů na byty, přičemž modifikátory přístupu nemají vliv. Všechna pole jsou serializovatelná. Neserializují se atributy označené staticči transient ani třídy ani metody. Rekurzivní probírkou referencí se serializují i všechny referované objekty může to být rozsáhlý graf. Všechny jeho objekty musí být Serializable. FileOutputStream out = new FileOutputStream( "thetime" ); ObjectOutputStream oos = new ObjectOutputStream( out ); oos.writeobject( "Today" ); oos.writeobject( new Date( ) ); oos.flush( ); Každý další stav téhož objektu lze zapsat jen zavoláním oos.reset( ) před vlastním zápisem. PJV05 25

Deserializace vstupu je obnovení objektu ( tj. i celého grafu ). Přičemž musejí být k dispozici odpovídající třídy - kompatibilní dle serialversionuid. Deserializace konstruktory Serializable tříd nevolá, neboť by nastavily iniciální hodnoty. Volá však konstruktory nadtříd které nejsou Serializable. Nepřenesené atributy nastaví na jejich defaultní hodnoty dle jejich typu. File in = new File( "thetime" ); Object ois = new Object( in ); String today = ( String ) ois.readobject( ); Date date = ( Date ) ois.readobject( ); Jelikož metoda ois.readobject( ) vrací typ Object, je vhodné přetypovat. Zjistit typ lze metodou getclass( ) anebo operátorem instanceof. Objektové proudy implementují DataInput resp. DataOutput a tudíž lze proudem přenášet i primitivní hodnoty, řetězy a UTF. PJV05 26

serialversionuid Serializovatelné třídy mají identifikaci verze pomocí přiřazené konstanty serialversionuid stanovené výpočtem či přiřazením. Hodnotu serialversionuid lze zjistit programem jdk1.6\bin\serialver.exe classpath... class,... což je hešová hodnota odvozená z některých charakteristik třídy. Při serializaci se přikládá do objektového proudu viz třída java.io.objectstreamconstants. Při deserializaci se porovná s hodnotou třídy na vstupní straně. Při neshodě se vyhodí výjimka. Programátor může explicitně stanovit, že třídy jsou kompatibilní tím, že třídě vnutí určitou hodnotu atributu např: private static final long serialversionuid=333333333333333333333333l; PJV05 27

Ovládání serializace a deserializace Průběh a pořadí lze ovládat připsáním metod do serializovatelné třídy class A implements Serializable { static int i = 3; transient int j = 5; double d = 1.41; private void writeobject( ObjectOutputStream oos ) throws Exception { oos.writeint( i ); oos.defaultwriteobject( ); // serializuje normálně private void readobject( Object ois ) throws Exception { i = ois.readint( ); ois.defaultreadobject( ); // deserializuje normálně j = -1; // bez přenosu jen nastavení PJV05 28

Externalizable Pro realizaci vlastních představ lze implementovat třídu interfejsem java.io.externalizable, což znamená realizovat explicitní konstruktor bez parametrů a tyto dvě metody: public void writeexternal( ObjectOutput stream ) throws IOException { stream.writeint( i ); stream.writeobject( "Well done." ); public void readexternal( ObjectInput stream ) throws IOException, ClassNotFoundException { i = stream.readint( ); String msg = ( String ) ( stream.readobject( ) ); System.out.println( msg ); Externalizovaný vstup používá konstruktor, serializovaný nikoli. PJV05 29

Komprese Lze vytvořit standardní soubor.zip,.gzip nebo.jar, který je čitelný standardními programy - např. WinZip. Kompresi provádí Deflater. OutputStream os = new FileOutputStream( "C:\\data.zip" ); ZipOutputStream zos = new ZipOutputStream( os ); ZipEntry ze1 = new ZipEntry( "dir1 \\ dir2 \\ YY" ); zos.putnextentry( ze1 ); for ( int i = 0; i < 10000; i++ ) { zos.write( i ); ZipEntry z2 = new ZipEntry( "dir1 \\ ZZ" ); zos.putnextentry( ze2 ); for ( int i = 0; i < 10000; i++ ) { zos.write( i );... zos.close(); PJV05 30

Dekomprese Takto lze dekomprimovat standardní.zip,.gzip a.jar. Dekompresi provádí Inflater. is = new File( "C:\\data.zip" ); Zip zis = new Zip( is ); ZipEntry ze; int i; while ( ( ze = zis.getnextentry( ) )!= null ) { while ( ( i = zis.read( ) )!= -1 ) { System.out.print( i + " " ); zis.close( ); PJV05 31

ZipFile a ZipEntry Uložení entry a dat je patrně různé při kompresi ZipOutputStreamem a některými oblíbenými programy např. WinZip 7.0. Pro čtení a dekompresi je pak třeba použít ZipFile. ZipFile zf = new ZipFile ( "C:\\windata.zip" ); Enumeration en = zf.entries( ); while ( en.hasmoreelements( ) ) { System.out.print( en.nextelement( ) ; ZipEntry ze = zf.getentry( "dir1 / ZZ" ); is = zf.get ( ze ) ; int i; while ( ( i = zis.read( ) )!= -1 ) { System.out.print( i + " " ) ; zis.close( ) ; zf.close( ) ; PJV05 32

Třída RandomAccessFile Umožňuje libovolný přístup, čtení, zápis i připisování jakoby bytového pole realizovaného na periferním zařízení. Konstruktory mají mody: r, rw pro čtení i zápis, rws, rwd pro synchonizovanou aktualizaci bratra. Instanční metody: void close( ) uzavře soubor long getfilepointer ( ) - vrátí pointer void seek ( long pos ) - nastaví pointer read ( ), readxxx( ), readline různé způsoby čtení write ( ), writexxx( ) - různé způsoby psaní long length ( ) - zjistí rozsah souboru void setlength ( long newlength ) - zvětší-zmenší rozsah souboru int skipbytes ( int n ) - přeskočí FileChannel getchannel ( ) vrátí kanál bratra FileDecriptor getfd ( ) umožňuje připojení a synchronizaci bratra PJV05 33