14. Vstupy a výstupy v Javě



Podobné dokumenty
Seminář Java VI p.1/33

Proudy, Zpracovсnэ XML. Radek Koэ

InputStream. FilterInputStream

Vstup/Výstup, Sokety. Duben 2012

6. PRÁCE S DATOVÝMI PROUDY

Práce se soubory v Javě

Vstupy a výstupy strana 125

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

Úvod do programovacích jazyků (Java)

JAVA. Vstup a výstup

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

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

Programovací jazyk Java

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

Textové soubory. alg9 1

Programování v jazyku Java soubory a proudy

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

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

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

Třídy a objekty -příklady

Soubor jako posloupnost bytů

Programování v Javě I. Leden 2008

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 jazyce C. Proces celkového sestavení programu ze zdrojového kódu, vývojové nástroje Linuxu

Teoretické minimum z PJV

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

přetížení operátorů (o)

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

Android OpenGL. Animace a ovládání pomocí dotykové obrazovky

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

Jazyk C# (seminář 5)

Nerovnice s absolutní hodnotou

Úložiště elektronických dokumentů GORDIC - WSDMS

20. Projekt Domácí mediotéka

Úvod do programovacích jazyků (Java)

7. Datové typy v Javě

JAVA. Vstup a výstup

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

PAVIRO Zesilovač PVA-2P500

Tvorba trendové funkce a extrapolace pro roční časové řady

Typický prvek kolekce pro české řazení

Systém zvukové signalizace a spouštění motoru na základě stavu světla

Windows 10 (6. třída)

APSLAN. Komunikační převodník APS mini Plus <-> Ethernet nebo WIEGAND -> Ethernet. Uživatelský manuál

Popis připojení elektroměru k modulům SDS Micro, Macro a TTC.

Novinky v programu Účtárna 2.09

Využití ICT pro rozvoj klíčových kompetencí CZ.1.07/1.5.00/

PHP formátování řetězců

JAVA. Vstup a výstup

E-ZAK. metody hodnocení nabídek. verze dokumentu: QCM, s.r.o.

Java a národní prostředí

Microsoft Office. Word styly

Google AdWords - návod

CERTIFIKOVANÉ TESTOVÁNÍ (CT) Výběrové šetření výsledků žáků 2014

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

( ) Kreslení grafů funkcí metodou dělení definičního oboru I. Předpoklady: 2401, 2208

1.3.1 Kruhový pohyb. Předpoklady: 1105

Název: VY_32_INOVACE_PG3309 Booleovské objekty ve 3DS Max - sčítání a odčítání objektů

3.2.4 Podobnost trojúhelníků II

PREPROCESOR POKRAČOVÁNÍ

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

Postup pro generování asymetrického klíčového páru pro testovací prostředí Základních registrů

Tabulky Word egon. Tabulky, jejich formátování, úprava, změna velikosti

9.2.5 Sčítání pravděpodobností I

Ministerstvo pro místní rozvoj. podprogram

Výukový materiál zpracovaný v rámci projektu Výuka moderně

Dědičnost, polymorfismus, interface, práce se soubory

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

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

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

PŘÍRUČKA K POUŽÍVÁNÍ APLIKACE HELPDESK

Pravidla pro publicitu v rámci Operačního programu Doprava

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

{ } Kombinace II. Předpoklady: =. Vypiš všechny dvoučlenné kombinace sestavené z těchto pěti prvků. Urči počet kombinací pomocí vzorce.

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

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

Klientský formát POHLEDÁVKY platný od

Poznámky k verzi. Scania Diagnos & Programmer 3, verze 2.27

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

Jak stáhnout video/hudbu z YouTube. Napsal uživatel Yeah(c) Neděle, 15 Listopad :44

ELEKTROTECHNICKÁ MĚŘENÍ PRACOVNÍ SEŠIT 2-3

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

ŘÍZENÍ FYZIKÁLNÍHO PROCESU POČÍTAČEM

KTE / ZPE Informační technologie

Soubory Práce se soubory Čtení a zápis souboru v Javě Binární soubory Textové soubory

JAK PŘIDAT UŽIVATELE PRO ADMINISTRÁTORY

DUM 16 téma: Dávkové soubory

Dopravní úloha. Jiří Neubauer. Katedra ekonometrie FEM UO Brno

Java a Caché IV: Manipulace s objekty

5 Rekurze a zásobník. Rekurzivní volání metody

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

Převodníky analogových a číslicových signálů

Úvod do programování v jazyce Java

3. Rozměry a hmotnosti Přiřazení typů a velikostí čelních desek Odchylka od TPM... 8

Modul účetnictví: Kontrolní výkaz DPH (SK) Podklady ke školení

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

Ošetřování chyb v programech

AVG Instalace DataCenter na databázi Firebird

Transkript:

14. Vstupy a výstupy v Javě Koncepce I/O proudů v Javě, skládání (obalování vlastnostmi) Práce se soubory a adresáři, třída File Binární proudy, třídy InputStream, OutputStream Znakové proudy, třídy Reader, Writer Serializace objektů Koncepce vstupně/výstupních operací v Javě založeny na v/v proudech plně platformově nezávislé V/V proudy jsou znakové (Reader/Writer) nebo binární (Stream) koncipovány jako "stavebnice" - lze vkládat do sebe a tím přidávat vlastnosti, např. is = new InputStream(...); bis = new BufferedInputStream(is); Téměř vše ze vstupních/výstupních tříd a rozhraní je v balíku java.io. počínaje J2SDK1.4 se rozvíjí alternativní balík - java.nio(new I/O) Blíže viz dokumentace API balíků java.io, java.nio. Práce se soubory vše je opět v balíku java.io základem je třída java.io.file - nositel jména souboru, jakási "brána" k fyzickým souborům na disku. používá se jak pro soubory, tak adresáře, linky i soubory identifikované UNC jmény (\\počítač\adresář...) opět plně platformově nezávislé na odstínění odlišností jednotlivých systémů souborů lze použít vlastností (uvádíme jejich hodnoty pro JVM pod systémem MS Windows): Třída File File.separatorChar \ - jako char File.separator \ - jako String File.pathSeparatorChar ; - jako char File.pathSeparator ; - jako String System.getProperty("user.dir") - adresář uživatele, pod jehož UID je proces JVM spuštěn Vytvoření konstruktorem - máme několik možností: new File(String filename)

vytvoří v aktuálním adresáři soubor s názvem filename new File(File basedir, String filename) vytvoří v adresáři basedir soubor s názvem filename new File(String basedirname, String filename) vytvoří v adresáři se jménem basedirname soubor s názvem filename new File(URL url) vytvoří soubor se (souborovým - file:) URL url Testy existence a povahy souboru: boolean exists() test na existenci souboru (nebo adresáře) boolean isfile() test, zda jde o soubor (tj. ne adresář) boolean isdirectory() test, zda jde o adresář Test práv ke čtení/zápisu: boolean canread() test, zda lze soubor číst boolean canwrite() test, zda lze do souboru zapisovat Třída File (2) Vytvoření souboru nebo adresáře: boolean createnewfile() (pro soubor) vrací true, když se podaří soubor vytvořit boolean mkdir() (pro adresář) vrací true, když se podaří adresář vytvořit boolean mkdirs() navíc si dotvoří i příp. neexistující adresáře na cestě Vytvoření dočasného (temporary) souboru: static File createtempfile(string prefix, String suffix) vytvoří dočasný soubor ve standardním pro to určeném adresáři (např. c:\temp) s uvedeným prefixem a sufixem názvu static File createtempfile(string prefix, String suffix, File directory) dtto, ale vytvoří dočasný soubor v adr. directory Zrušení: boolean delete() zrušení souboru nebo adresáře Přejmenování (ne přesun mezi adresáři!): boolean renameto(file dest) přejmenuje soubor nebo adresář Třída File (3) Další vlastnosti: long length() délka (velikost) souboru v bajtech

long lastmodified() čas poslední modifikace v ms od začátku éry - podobně jako systémový čas vracený System.currentTimeMillis(). String getname() jen jméno souboru (tj. poslední část cesty) String getpath() celá cesta k souboru i se jménem String getabsolutepath() absolutní cesta k souboru i se jménem String getparent() adresář, v němž je soubor nebo adresář obsažen Blíže viz dokumentace API třídy File. Práce s adresáři Klíčem je opět třída File - použitelná i pro adresáře Jak např. získat (filtrovaný) seznam souborů v adresáři? pomocí metody File[] listfiles(filefilter ff) nebo podobné File[] listfiles(filenamefilter fnf):filefilter je rozhraní s jedinou metodou boolean accept(file pathname), obdobně FilenameFilter, viz Popis API java.io. FilenameFilter Práce s binárními proudy Vstupní jsou odvozeny od abstraktní třídy InputStream Výstupní jsou odvozeny od abstraktní třídy OutputStream Vstupní binární proudy Uvedené metody, kromě abstract byte read(), nemusejí být nutně v neabstraktní podtřídě překryty. void close() uzavře proud a uvolní příslušné zdroje (systémové "file handles" apod.) void mark(int readlimit) poznačí si aktuální pozici (později se lze vrátit zpět pomocí reset ())... boolean marksupported()...ale jen když platí tohle abstract int read() přečte bajt (0-255 pokud OK; jinak -1, když už není možné přečíst) int read(byte[] b) přečte pole bajtů int read(byte[] b, int off, int len) přečte pole bajtů se specifikací délky a pozice plnění pole b void reset() vrátí se ke značce nastavené metodou mark(int)

long skip(long n) přeskočí zadaný počte bajtů Důležité neabstraktní třídy odvozené od InputStream java.io.filterinputstream - je bázová třída k odvozování všech vstupních proudů přidávajících vlastnost/schopnost filtrovat poskytnutý vstupní proud. Příklady filtrů (ne všechny jsou v java.io!): BufferedInputStream proud s vyrovnávací pamětí (je možno specifikovat její optimální velikost) java.util.zip.checkedinputstream proud s kontrolním součtem (např. CRC32) javax.crypto.cipherinputstream proud dešifrující data ze vstupu DataInputStream má metody pro čtení hodnot primitivních typů, např. float readfloat() java.security.digestinputstream počítá současně i haš (digest) čtených dat, použitý algoritmus lze nastavit java.util.zip.inflaterinputstream dekomprimuje (např. GZIPem) zabalený vstupní proud (má ještě specializované podtřídy) LineNumberInputStream doplňuje informaci o tom, ze kterého řádku vstupu čteme (zavrhovaná - deprecated - třída) ProgressMonitorInputStream přidává schopnost informovat o průběhu čtení z proudu PushbackInputStream do proudu lze data vracet zpět Další vstupní proudy Příklad rekonstrukce objektů ze souborů FileInputStream istream = new FileInputStream("t.tmp"); ObjectInputStream p = new ObjectInputStream(istream); int i = p.readint(); String today = (String)p.readObject(); Date date = (Date)p.readObject(); istream.close(); javax.sound.sampled.audioinputstream vstupní proud zvukových dat ByteArrayInputStream proud dat čtených z pole bajtů PipedInputStream roura napojená na "protilehlý" PipedOutputStream SequenceInputStream proud vzniklý spojením více podřízených proudů do jednoho

virtuálního ObjectInputStream proud na čtení serializovaných objektů Práce se znakovými proudy základem je abstraktní třída Reader, konkrétními implementacemi jsou: BufferedReader, CharArrayReader, InputStreamReader, PipedReader, StringReader LineNumberReader, FileReader, PushbackReader Výstupní proudy nebudeme důkladně probírat všechny typy principy: jedná se o protějšky k vstupním proudům, názvy jsou konstruovány analogicky (např. FileReader -> FileWriter) místo generických metod read mají write(...) Příklady: PrintStream poskytuje metody pro pohodlný zápis hodnot primitivních typů a řetězců - příkladem jsou System.out a System.err PrintWriter poskytuje metody pro pohodlný zápis hodnot primitivních typů a řetězců Konverze: znakové <-> binární proudy Ze vstupního binárního proudu InputStream (čili každého) je možné vytvořit znakový Reader pomocí // nejprve binární vstupní proud - toho kódování znaků nezajímá InputStream is =... // znakový proud isr // použije pro dekódování standardní znakovou sadu Reader isr = new InputStreamReader(is); // sady jsou definovány v balíku java.nio Charset chrs = java.nio.charset.forname("iso-8859-2"); // znakový proud isr2 // použije pro dekódování jinou znakovou sadu Reader isr2 = new InputStreamReader(is, chrs); Podporované názvy znakových sad naleznete na webu IANA Charsets. Obdobně pro výstupní proudy - lze vytvořit Writer z OutputStream. Serializace objektů

Odkazy nebudeme podrobně studovat, zatím stačí vědět, že: o serializace objektů je postup, jak z objektu vytvořit sekvenci bajtů persistentně uložitelnou na paměťové médium (disk) a později restaurovatelnou do podoby výchozího javového objektu. o deserializace je právě zpětná rekonstrukce objektu aby objekt bylo možno serializovat, musí implementovat (prázdné) rozhraní java.io.serializable proměnné objektu, které nemají být serializovány, musí být označeny modifikátorem - klíčovým slovem - transient pokud požaduje "speciální chování" při de/serializaci, musí objekt definovat metody o private void readobject (java.io.objectinputstream stream) throws IOException, ClassNotFoundException o private void writeobject (java.io.objectoutputstream stream) throws IOException metody: o DataOutputStream.writeObject(Object o) Tutoriály k Java I/O: kapitola z Sun Java Tutorial Demo programy na serializaci (z učebnice): Serializace objektů