Proudy, Zpracovсnэ XML. Radek Koэ



Podobné dokumenty
Vstup/Výstup, Sokety. Duben 2012

Seminář Java VI p.1/33

6. PRÁCE S DATOVÝMI PROUDY

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

InputStream. FilterInputStream

Práce se soubory v Javě

14. Vstupy a výstupy v Javě

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

Soubor jako posloupnost bytů

Úvod do programovacích jazyků (Java)

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

Programování v Javě I. Leden 2008

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

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

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

Textové soubory. alg9 1

Teoretické minimum z PJV

Úvod do programovacích jazyků (Java)

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

Java a Caché IV: Manipulace s objekty

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Principy objektově orientovaného programování

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

KTE / ZPE Informační technologie

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

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

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

Distribuované systémy a výpočty

Java a národní prostředí

typová konverze typová inference

RMI Remote Method Invocation

Abstraktní datové typy: zásobník

Výjimky. v C# a Javě

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

Rozhraní SAX, SAX vs. SAX2. Jaroslav Ciml

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

Programovací jazyk Java

Algoritmizace a programování

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

Programování v jazyku Java soubory a proudy

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

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

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

Typický prvek kolekce pro české řazení

PREPROCESOR POKRAČOVÁNÍ

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

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

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

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

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

Seminář Java II p.1/43

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

UJO Framework. revoluční architektura beans. verze

20. Projekt Domácí mediotéka

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

Datové struktury. alg12 1

7. Datové typy v Javě

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

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

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

Technologie JavaBeans

Replikace v PostgreSQL

Jazyk C# (seminář 5)

Algoritmizace a programování

Iterator & for cyklus

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

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

Java Výjimky Java, zimní semestr

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

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

RMI - Distribuované objekty v Javě

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

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

Regulární výrazy. Vzory

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

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

PRG036 Technologie XML

Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů

Rozhraní pro práci s XML dokumenty. Roman Malo

3 KTE / ZPE Informační technologie

Vstupy a výstupy strana 125

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

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)

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 opakování

Úvod do programovacích jazyků (Java)

NSWI096 - INTERNET JavaScript

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

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

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Na tomto místě bude oficiální zadání vaší práce

Výčtový typ strana 67

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

1. Programování proti rozhraní

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

Distribuované systémy a výpočty

Transkript:

Seminс Java Proudy, Zpracovсnэ XML Radek Koэ Fakulta informanэch technologiэ VUT Bezen 2008 Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 1/ 38

Obsah Vstup/Vstup koncepce proud soubory, adresсe binсrnэ proudy (tэdy InputStream, OutputStream) znakovщ proudy (tэdy Reader, Writer) filtrovanщ proudy standardnэ vstup a vstup Komprimace Serializace Zpracovсnэ XML dokument Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 2/ 38

Koncepce i/o operacэ Balэky java.io zсkladnэ knihovna pro prсci s proudy java.nio alternativnэ knihovna od verze 1.4+ (new IO) I/O operace zaloeny na i/o proudech transparentnэ platformov nezсvislщ Datov proud libovoln datov zdroj i cэl schopn zpэstupnit/pijmout libovolnщ datovщ bloky reprezentovсn objektem ukrvсnэ detail (skutenщ akce se skutenm i/o zaэzenэm) Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 3/ 38

Koncepce i/o operacэ Proudy jako stavebnice kadс tэda reprezentuje jeden typ proudu (definuje jeho vlastnosti operace) novщ vlastnosti se dajэ zэskat vklсdсnэm objekt (proud) do sebe... is = new InputStream(...); bis = new BufferedInputStream(is);... Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 4/ 38

Prсce se soubory Tэda java.io.file obaluje fyzickщ soubory (adresсe, linky) na disku speciality systщm soubor (transparentnэ odli enэ) char File.separatorChar ( / nebo \ ) String File.separator char File.pathSeparatorChar ( : nebo ; ) String File.pathSeparator System.getProperty("user.dir") adresс uivatele s jeho UID byl spu tn proces JVM soubor (adresс) je reprezentovсn v objektu abstraktnэm pathname pi pэstupu k zaэzenэ se konvertuje na systщmov zavislщ jmщno vytvoenэm instance tэdy File se k zaэzenэ nepistupuje! Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 5/ 38

Tэda File Kostruktory File(String pathname) vytvoэ instanci File konvertovсnэm etzce pathname na abstraktnэ pathname File(String parent, String child) vytvoэ instanci File z etzce parent a etzce child File(File parent, String child) vytvoэ instanci File z abstraktnэho pathname objektu parent pathname a etzce child File(URI uri) vytvoэ instanci File konvertovсnэm danщho file:uri na abstraktnэ pathname Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 6/ 38

Tэda File Testovacэ operace boolean exists() boolean isfile() boolean isdirectory() boolean canread() boolean canwrite()... Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 7/ 38

Tэda File Vytvoenэ souboru (adresсe) boolean createnewfile() vytvoэ nov prсzdn soubor podle abstraktnэho pathname; vracэ true, pokud se oprace zdaэ boolean mkdir() vytvoэ adresс... boolean mkdirs() jako boolean mkdir(), vytvсэ i adresсovou strukturu, pokud je poteba... Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 8/ 38

Tэda File Vytvoenэ doasnщho (temporary) souboru static File createtempfile(string prefix, String suffix) vytvoэ doasn soubor ve standardnэm adresсi static File createtempfile(string prefix, String suffix, File directory) vytvoэ doasn soubor v uvedenщm adresсi Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 9/ 38

Tэda File Dal э vlastnosti boolean delete() boolean renameto(file dest) long length() long lastmodified() String getname() String getpath() String getabsolutepath() String getparent()... V echny vlastnosti a operace viz API documentation Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 10/ 38

Ukсzka prсce s adresсi File String[] list() vracэ pole etzc reprezentujэcэch jmщna soubor a adresс v adresсi danщm abstraktnэm pathname String[] list(filenamefilter filter) vracэ pole etzc reprezentujэcэch jmщna soubor a adresс v adresсi danщm abstraktnэm pathname, kterщ odpovэdajэ filtru Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 11/ 38

Ukсzka prсce s adresсi File File[] listfiles() vracэ pole abstraktnэch pathname reprezentujэcэch soubory a adresсe v adresсi danщm abstraktnэm pathname File[] listfiles(filefilter filter) vracэ pole abstraktnэch pathname reprezentujэcэch soubory a adresсe v adresсi danщm abstraktnэm pathname, kterщ odpovэdajэ filtru File[] listfiles(filenamefilter filter) vracэ pole abstraktnэch pathname reprezentujэcэch soubory a adresсe v adresсi danщm abstraktnэm pathname, kterщ odpovэdajэ filtru Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 12/ 38

Ukсzka prсce s adresсi Rozhranэ FilenameFilter definuje jednu metodu boolean accept(file dir, String name) test, zda uveden soubor by ml bt obsaen v seznamu Rozhranэ FileFilter definuje jednu metodu boolean accept(file pathname) test, zda uveden abstraktnэ pathname by ml bt obsaen v seznamu Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 13/ 38

Ukсzka prсce s adresсi File cesta = new File("."); String[] seznam; seznam = cesta.list(new FilenameFilter() { public boolean accept(file adr, String cesta) { String soubor = new File(cesta).getName(); return soubor.indexof("x")!= -1; } }); } for(string name : seznam) { System.out.println(name); } Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 14/ 38

Binсrnэ proudy Vstupnэ (odvozeny od abstraktnэ tэdy InputStream) pole byt soubor String roura... Vstupnэ (odvozeny od abstraktnэ tэdy OutputStream) pole byt soubor... Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 15/ 38

Vstupnэ binсrnэ proudy Operace void close() uzave proud, uvolnэ zdroje abstract int read() te byte, pokud nelze, vracэ -1 int read(byte[] b) te b.length byt int read(byte[] b, int off, int len) te len byt z proudu od pozice off long skip(long n) peskoэ n byt void mark(int readlimit) poznaэ aktuсlnэ pozici (readlimit je poet byt, kterщ lze peэst, ne se znaka stane nevalidnэ) void reset() obnovenэ pozice uchovanщ pi volсnэ mark() boolean marksupported() Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 16/ 38

Vstupnэ binсrnэ proudy Odvozenщ od FilterInputStream InputStream java.io.bufferedinputstream proud s vyrovnсvacэ pamtэ java.util.zip.checkedinputstream proud s kontrolnэm soutem javax.crypto.cipherinputstream proud de ifrujэcэ data java.io.datainputstream proud s metodami pro tenэ hodnot primitivnэch datovch typ... Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 17/ 38

Vstupnэ binсrnэ proudy analogicky k vstupnэm InputStream OutputStream... Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 18/ 38

Ukсzka public static void main(string[] args) { try { FileOutputStream fos = new FileOutputStream("t.tmp"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeint(12345); oos.writeobject("today"); oos.writeobject(new Date()); oos.close();... Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 19/ 38

Ukсzka FileInputStream fis = new FileInputStream("t.tmp"); ObjectInputStream ois = new ObjectInputStream(fis); int i = ois.readint(); String today = (String) ois.readobject(); Date date = (Date) ois.readobject(); ois.close(); System.out.println(i + today + date); } } catch (Exception ex) { ex.printstacktrace(); } Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 20/ 38

Znakovщ proudy Vstupnэ (odvozeny od abstraktnэ tэdy Reader) BufferedReader PipedReader InputStreamReader FileReader InputStreamReader... Vstupnэ (odvozeny od abstraktnэ tэdy Writer) BufferedReader PipedWriter InputStreamWriter FileWriter InputStreamWriter... Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 21/ 38

Konverze mezi proudy Z binсrnэho proudu (vstupnэ/vstupnэ) lze vytvoit proud znakov (vstupnэ/vstupnэ) // vytvoэme binсrnэ vstupnэ proud InputStream is =... // z is vytvoэme znakov proud (pro // dekѓdovсnэ se pouzije std. znakovс sada) Reader isr = new InputStreamReader(is); // znakovщ sady jsou v balэku java.nio Charset chrs = java.nio.charset.forname("iso-8859-2"); // z is vytvoэme znakov proud (pro // dekѓdovсnэ se pouzije jinс znakovс sada) Reader isr2 = new InputStreamReader(is, chrs); Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 22/ 38

Standardnэ vstup a vstup Ve tэd java.lang.system static InputStream in static PrintStream out static PrintStream err Zmna standardnэch proud setin(inputstream in) setout(printstream out) seterr(printstream err) Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 23/ 38

Pэklad tenэ ze std. vstupu public class ReadIn { public static void main(string[] args) { try { BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); } } String line; while((line = in.readline()).length()!= 0) { System.out.println(line); } } catch(ioexception ioe) { ioe.printstacktrace(system.err); } Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 24/ 38

Komprimace Package java.util.zip BufferedReader in = new BufferedReader( new FileReader(args[0])); BufferedOutputStream out = new BufferedOutputStream(new GZIPOutputStream( new FileOutputStream(args[1]))); int b; while((b = in.read())!= -1) out.write(b); in.close(); out.close(); Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 25/ 38

Serializace objekt Serializace perzistence objekt zэskсnэ reprezentace objektu jako sekvence byt uloenэ reprezentace do souboru Deserializace rekonstrukce serializovanщho objektu Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 26/ 38

Serializace objekt Serializovan objekt musэ implementovat rozhranэ java.io.serializable nemс сdnщ metody, slouэ pouze pro identifikaci serializovatelnщho objektu v echny podэdy tэdy, kterс implementuje toto rozhranэ, jsou takщ serializovatelnщ promnnщ objektu, kterщ nemajэ bt serializovсny, musэ bt oznaeny modifikсtorem transient pokud je pi (de)serializace nutnщ speciсlnэ chovсnэ, musэ objekt definovat tyto metody private void readobject(objectinputstream is) private void writeobject(objectoutputstream os) viz API pro java.io.serializable Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 27/ 38

Serializace objekt pэklad class Clovek implements Serializable { String jmeno; protected Clovek() { } public Clovek(String jmeno) { this.jmeno = jmeno; } public String info() { return jmeno; } } Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 28/ 38

Serializace objekt pэklad private static final String soubor = "clovek.dat"; public static void serializuj(clovek p) throws Exception { FileOutputStream fos = new FileOutputStream(soubor); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeobject(p); fos.close(); } Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 29/ 38

Serializace objekt pэklad public static Clovek deserializuj() throws Exception { FileInputStream fis = new FileInputStream(soubor); ObjectInputStream ois = new ObjectInputStream(fis); Clovek p = (Clovek)ois.readObject(); fis.close(); return p; } Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 30/ 38

Prсce s XML XML je standard konsorcia W3C jak vytvсet znakovacэ jazyky ideov vychсzэ ze zhruba o deset let mlad эho standardu SGML (Structure Generalized Markup Language). XML nenэ jeden konkrщtnэ znakovacэ jazyk je to specifikace urujэcэ, jak majэ vypadat znakovacэ jazyky je to metajazyk konceptuсln jde o zjednodu enэ SGML standardu, aby se usnadnila prсce tvrcm parser (analyzсtor) a aplikacэ se zсkladnэm standardem њzce souvisejэ dal э, nap. XML Namespaces, XInclude, XML Base. spolen s dal эmi standardy (XSLT, XSL-FO, XHTML, CSS...) tvoэ rodinu standard XML. Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 31/ 38

Struktura XML dokumentu Logickс Fyzickс dokument se lenэ na elementy (jedna z nich je koenovс), atributy element, textovщ uzly v elementech, intrukce pro zpracovсnэ, notace, komentсe dokument je reprezentovсn stromem element jeden logick dokument me bt uloen ve vэce fyzickch jednotkсch (entitсch); vdy alespo v jednщ document entity. <!ENTITY kap1 SYSTEM "kapitola1.xml"> <!ENTITY swn "Softwarovщ noviny"> Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 32/ 38

Zpracovсnэ XML dokumentu Hlavnэ typy rozhranэ pro zpracovсnэ XML dat: Stromov orientovanс rozhranэ (Tree-based API) Rozhranэ zaloenс na udсlostech (Event-based API) Rozhranэ zaloenс na vytahovсnэ udсlostэ/prvk z dokumentu (Pull API) Implementace pro Javu parsery souсst JAXP (Java API for XML Processing) http://java.sun.com/xml/jaxp/index.html nezсvislщ nap. http://dom4j.org Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 33/ 38

Tree-based API Mapujэ XML dokument na stromovou strukturu v pamti dovolujэ libovoln prochсzet vznikl strom; nejznсmj э je Document Object Model (DOM) konsorcia W3C, viz http://www.w3.org/dom Modely specifickщ pro konkrщtnэ prostedэ pro Javu: JDOM http://jdom.org pro Javu: dom4j http://dom4j.org pro Python: 4Suite http://4suite.org Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 34/ 38

Event-based API Pi analze dokumentu generujэ udсlosti (podle toho, kde se nachсzejэ) zpracovсvajэcэ aplikace implementuje obsluhu tchto udсlostэ (pomocэ metod callback) udсlostmi эzenс rozhranэ jsou ni э њrovn ne stromovс (pro aplikaci zstсvс vэce prсce ) jsou њspornj э na pam (i as), samotnс analza nevytvсэ trvalщ objekty Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 35/ 38

Event-based API Udсlost je... zaсtek a konec dokumentu (start document, end document) komentс (comment) odkaz na entitu (entity reference)... Nejznсmj эm rozhranэm je SAX (http://www.saxproject.org) Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 36/ 38

Event-based API Ukazka <?xml version="1.0"?> <doc> <para>hello, world!</para> </doc> Sled udalosti: start document start element: doc {seznam atributu: prazdny} start element: para {seznam atributu: prazdny} characters: Hello, world! end element: para end element: doc end document Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 37/ 38

Zdroje informacэ World Wide Web Consortium (W3C) http://www.w3.org/ XML Startkabel (EN/NL): aktuality, odkazy http://xml.startkabel.nl Soubor tutoriсl a on-line referencэ v mnoha jazycэch http://zvon.org O Reilly XML.COM: lсnky, tutoriсly atd. na vysokщ technickщ њrovni http://xml.com Free XML Software (L. M. Garshol): kolekce odkaz na nekomernэ XML software http://www.garshol.priv.no/download/xmltools/ Kolekce odkaz na obecn XML software (i komernэ) http://xmlsoftware.com J. Kosek: http://kosek.cz/xml/index.html Radek Koэ Seminс Java Proudy, Zpracovсnэ XML 38/ 38