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

Podobné dokumenty
Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java)

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

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

Soubor jako posloupnost bytů

Práce se soubory v Javě

6. PRÁCE S DATOVÝMI PROUDY

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

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

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

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

Úvod do programovacích jazyků (Java)

InputStream. FilterInputStream

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

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

Textové soubory. alg9 1

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

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

Seminář Java II p.1/43

Programování v Javě I. Leden 2008

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

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

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

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

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

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

Algoritmizace a programování

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

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

PREPROCESOR POKRAČOVÁNÍ

Paměť počítače. alg2 1

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

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

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Ošetřování chyb v programech

Java Výjimky Java, zimní semestr

KTE / ZPE Informační technologie

Teoretické minimum z PJV

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

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

7. Datové typy v Javě

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

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

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/

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

ADT/ADS = abstraktní datové typy / struktury

10 Balíčky, grafické znázornění tříd, základy zapozdření

7.5 Diagram tříd pokročilé techniky

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

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

Principy objektově orientovaného programování

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

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

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

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

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

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

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

Základy objektové orientace I. Únor 2010

PŘETĚŽOVÁNÍ OPERÁTORŮ

6. Příkazy a řídící struktury v Javě

KTE / ZPE Informační technologie

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

Regulární výrazy. Vzory

Výčtový typ strana 67

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

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

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Programování v C++ 2, 4. cvičení

Jazyk C# (seminář 6)

Algoritmizace a programování

Zápis programu v jazyce C#

Práce se soubory. Úvod do programování 2 Tomáš Kühr

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

9. přednáška - třídy, objekty

7.5 Diagram tříd pokročilé techniky

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Abstraktní datové typy: zásobník

IRAE 07/08 Přednáška č. 1

PROGRAMOVÁNÍ V C++ CVIČENÍ

1. Programování proti rozhraní

1. Dědičnost a polymorfismus

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Í

Jazyk C++ I. Polymorfismus

3 KTE / ZPE Informační technologie

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

KTE / ZPE Informační technologie

VISUAL BASIC. Práce se soubory

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

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

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Datové abstrakce v programovacích jazycích

Proudy, Zpracovсnэ XML. Radek Koэ

Funkční objekty v C++.

Vstup a výstup datové proudy v C

Úvodní informace. Petr Hnětynka 2/2 Zk/Z

Proměnné a datové typy

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

Transkript:

Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 1/26

1/2 jazyka Java (také překladová jednotka) má následující strukturu: deklarace package, deklarace import, deklarace typů. Pořadí těchto částí je závazné, každá část je nepovinná. Deklarace package má tvar: package name; kde name je (normativní) jméno balíčku. Deklarace import je posloupnost deklarací import (jednoduchých nebo on-demand). Deklarace typů je posloupnost definicí tříd a rozhraní. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 2/26

2/2 Pokud zdrojový soubor obsahuje veřejnou třídu nebo rozhraní jménem A, pak jméno zdrojového souboru musí být A.java. Pokud zdrojový soubor obsahuje třídu nebo rozhraní jménem A, které je odkazováno z jiného zdrojového souboru, pak jméno zdrojového souboru musí být A.java. Z těchto pravidel vyplývá, že soubor obsahuje nejvýše jednu třídu nebo rozhraní, která je veřejná nebo odkazována z jiného zdrojového souboru. Když jsou kompilovány zdrojové soubory, pak pro třídu nebo rozhraní A je vytvořen soubor A.class. Jména adresářů odpovídají jménům balíčků. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 3/26

Přístup ke členům třídy může být specifikován: public, protected, private nebo není specifikován (implicitní přístup default). public - přístupný z libovolné třídy, protected - přístupný z podtřídy a z jiné třídy stejného balíčku, default - přístupný z libovolné třídy stejného balíčku, private - přístupný pouze ve třídě, kde je člen definován. Při předefinování metody v podtřídě, musí být metoda deklarována se stejným nebo více volnějším přístupem než metoda v nadtřídě. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 4/26

1/7 Program často potřebuje číst nebo zapsat data z/do externích zdrojů. Data může obsahovat soubor na disku, soubor na síti, blok paměti atd. Proudy reprezentují abstrakci umožňující sekvenční čtení a zápis dat. Při použití proudů můžeme přistupovat k datům bez ohledu na to z jakého zdroje je čteme popř. zapisujeme. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 5/26

Proudy 2/7 Úvod do programovacích jazyků (Java), 9 Rozlišujeme dva typy proudů: vstupní proudy pro čtení dat, výstupní proudy pro zápis dat. Pro čtení a zápis dat používáme podobná schémata: Čtení: Otevření proudu. Dokud jsou v proudu data, čti. Uzavření proudu. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 6/26

Proudy 3/7 Úvod do programovacích jazyků (Java), 9 Zápis: Otevření proudu Dokud jsou data, zapisuj. Uzavření proudu c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 7/26

Proudy 4/7 Úvod do programovacích jazyků (Java), 9 Balík java.io obsahuje kolekci tříd pro práci s proudy. Třídy rozdělujeme do dvou hierarchií: Binární proudy pracují s proudy binárních dat. Podtřídy tříd: InputStream - vstupní proud, OutputStream - výstupní proud. Znakové proudy pracují s proudy znaků. Podtřídy tříd: Reader - vstupní proud, Writer - výstupní proud. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 8/26

Proudy, metody 5/7 InputStream: i n t read ( ) i n t read ( byte [ ] b ) i n t read ( byte [ ] b, i n t o f f, i n t len ) OutputStream: void w r i t e ( i n t b ) void w r i t e ( byte [ ] b ) void w r i t e ( byte [ ] b, i n t o f f, i n t len ) Reader: i n t read ( ) i n t read ( char [ ] cbuf ) i n t read ( char [ ] cbuf, i n t o f f, i n t len ) c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 9/26

Proudy, metody 6/7 Writer: void w r i t e ( i n t c ) void w r i t e ( char [ ] cbuf ) void w r i t e ( char [ ] cbuf, i n t o f f, i n t len ) Další metody: Všechny třídy obsahují metodu close(). Tato metoda je bud volána explicitně nebo implicitně při rušení objektu garbage collectorem. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 10/26

Proudy, metody 7/7 Třídu InputStream a Reader obsahují metody: long skip ( long n ) / / preskoceni n bytu boolean marksupported ( ) / / oznaceni a k t u a l n i h o bytu void mark ( i n t readaheadlimit ) void r e s e t ( ) Třídy OutputStream a Writer obsahují metodu: void f l u s h ( ) / / vyprazdneni buferu Většina metod pracující s proudy vyhazuje výjimku java.io.ioexception nebo některou z jejich podtříd. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 11/26

Souborové proudy 1/3 Souborové proudy čtou nebo zapisují do souborů na souborovém systému. FileInputStream FileOutputStream FileReader FileWriter c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 12/26

Souborové proudy 2/3 Příklad: Reader i n = new FileReader ( " i n p u t. t x t " ) ; W r i t e r out = new F i l e W r i t e r ( " output. t x t " ) ; i n t c ; while ( ( c = i n. read ( ) ) > = 0 ) out. w r i t e ( c ) ; i n. close ( ) ; out. close ( ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 13/26

Souborové proudy 3/3 Čtení data byt po bytu není příliš efektivní. Snažíme se tedy číst data po větších blocích. InputStream i n = new FileInputStream ( " i n p u t. t x t " ) ; OutputStream o u t = new FileOutputStream ( " output. t x t " ) ; f i n a l i n t BUFFER_LENGTH = 8 1 9 2 ; byte [ ] buf = new byte [BUF_LEN ] ; i n t l ; while ( ( l = i n. read ( buf, 0, BUF_LEN ) ) > = 0 ) out. w r i t e ( buf, 0, l ) ; i n. close ( ) ; out. close ( ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 14/26

Třída File 1/2 Instance třídy java.io.file reprezentuje soubor na souborovém systému. Pokud vytvoříme instanci třídy File pro nějaký soubor, můžeme zjišt ovat následující informace: Plné jméno souboru. Jméno rodičovského adresáře. Zda se jedná o soubor nebo adresář. Zda je zadán absolutně nebo relativně. Zda existuje. Velikost souboru. Přístupová práva (čtení, zápis). Čas modifikace, zda je skrytý apod. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 15/26

Třída File 2/2 Instanci třídy java.io.file můžeme použít pro: Vytváření souboru. Rušení souboru. Přejmenování souboru. Vylistování adresáře. Vytvoření podadresáře. Nastavení času modifikace. Vytvoření pomocných souborů (temporary files). S t r i n g filename = " t e s t. t x t " ; F i l e f = new F i l e ( filename ) ; boolean ok = f. d e l e t e ( ) ; System. out. p r i n t l n ( ok? "O. K. " : " Not deleted " ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 16/26

Standardní vstup a výstup Ve třídě System jsou definovány tyto třídní konstantní proměnné: in - standardní vstup (InputStream), implicitně klávesnice. out - standardní výstup (PrintStream), implicitně obrazovka. err - standardní chybový výstup (PrintStream). Všechny tyto proudy jsou implicitně otevřené a nemohou být uzavřeny. Všechny tyto proudy je možné přesměrovat. $ java ClassName < i n p u t. t x t > output. t x t $ java ClassName < i n p u t. t x t less Ukončení vstupu: ^Z (Windows), ^D (Linux). c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 17/26

Další třídy Úvod do programovacích jazyků (Java), 9 Čtení a zápis primitivních datových typů DataInputStream, DataOutputStream. Náhodný přístup k datům RandomAccessFile. (PrintStream). BufferedInputStream, BufferedOutputStream. c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 18/26

Příklad, DoubleArray.java 1/4 package streamtest ; public class DoubleArray double marray [ ] ; public DoubleArray ( i n t c a p a c i t y ) marray = new double [ c a p a c i t y ] ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 19/26

Příklad, DoubleArray.java 2/4 public void setvalue ( i n t index, double value ) marray [ index ] = value ; public double getvalue ( i n t index ) return marray [ index ] ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 20/26

Příklad, DoubleArray.java 3/4 public void p r i n t ( ) for ( i n t i = 0 ; i < marray. l e n g t h ; i ++) System. out. p r i n t ( marray [ i ] + " " ) ; System. out. p r i n t ( " \ n " ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 21/26

Příklad, DoubleArray.java 4/4 public void s o r t ( ) for ( i n t i = 0 ; i < marray. l e n g t h ; i ++) for ( i n t j = 0 ; j < marray. length 1 ; i f ( marray [ j ] > marray [ j + 1 ] ) double tmp = marray [ j ] ; marray [ j ] = marray [ j + 1 ] ; marray [ j + 1 ] = tmp ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 22/26

Příklad, StreamApp.java 1/4 package streamtest ; public class StreamApp DoubleArray mdoublearray ; public StreamApp ( ) mdoublearray = new DoubleArray ( 1 0 ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 23/26

Příklad, StreamApp.java 2/4 public s t a t i c void main ( S t r i n g [ ] args ) new StreamApp ( ). Run ( ) ; public void Run ( ) read ( ) ; mdoublearray. p r i n t ( ) ; mdoublearray. s o r t ( ) ; mdoublearray. p r i n t ( ) ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 24/26

Příklad, StreamApp.java 3/4 private void read ( ) f i n a l i n t length = 1 0 2 4 ; i n t array [ ] = new i n t [ l e n gth ] ; i n t i = 0 ; t r y while ( ( array [ i + + ] = System. i n. read ( ) )! = 1 ) catch ( Exception e ) c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 25/26

Příklad, StreamApp.java 4/4 S t r i n g s t r = " " ; i n t countofnumber = 0 ; for ( i n t j = 0 ; j < i ; j + + ) i f ( array [ j ] = = j = = i 1 ) double v = Double. parsedouble ( s t r ) ; mdoublearray. setvalue ( countofnumber ++, v ) ; s t r = " " ; else s t r + = ( char ) array [ j ] ; c 2006 Michal Krátký Úvod do programovacích jazyků (Java) 26/26