Textové soubory. alg9 1

Podobné dokumenty
Soubor jako posloupnost bytů

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

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

Práce se soubory v Javě

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

Řídicí struktury. alg3 1

6. PRÁCE S DATOVÝMI PROUDY

Regulární výrazy. Vzory

Datové struktury. alg12 1

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

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

Úvod do programovacích jazyků (Java)

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

Algoritmizace a programování

7. Datové typy v Javě

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

3 KTE / ZPE Informační technologie

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

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

InputStream. FilterInputStream

Ošetřování chyb v programech

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

Úvod do programovacích jazyků (Java)

KTE / ZPE Informační technologie

Úvod do programovacích jazyků (Java)

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

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

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Seminář Java II p.1/43

Programování v Javě I. Leden 2008

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

Spojové struktury. Spojová struktura (linked structure):

Typický prvek kolekce pro české řazení

Algoritmizace a programování

- jak udělat konstantu long int: L long velka = 78L;

Výčtový typ strana 67

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

Podmínky na zápočet. Java, zimní semestr

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

Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice

Příkazy a řídicí struktury v Javě. Tomáš Pitner, upravil Marek Šabo

RMI Remote Method Invocation

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

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

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

Algoritmizace. Cíle předmětu

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

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

PREPROCESOR POKRAČOVÁNÍ

Algoritmizace a programování

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

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

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

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

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

Zápis programu v jazyce C#

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

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

Programovací jazyk Java

Java Výjimky Java, zimní semestr

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

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

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

URČITÝM ZPŮSOBEM PODOBNÉ

KTE / ZPE Informační technologie

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

KTE / ZPE Informační technologie

Znaky. IAJCE Přednáška č. 10. každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <->

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

Třída jako zdroj funkcí

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Objektově orientované programování

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Výjimky. v C# a Javě

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

Úvod do programování. Lekce 1

NPRG031 Programování II 1 / :47:55

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

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

Rozklad problému na podproblémy

Úvod do programování v jazyce Java

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

Abstraktní datové typy: zásobník

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

NPRG031 Programování II --- 2/2 Z, Zk

Programování v jazyce JavaScript

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Teoretické minimum z PJV

Generické programování

JUnit příklad na použití

Konečný automat. Jan Kybic.

Konstruktory překladačů

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

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

VISUAL BASIC. Práce se soubory

Transkript:

Textové soubory Textový soubor je posloupnost znaků členěná na řádky každý znak je reprezentován jedním bytem, jehož obsah je dán nějakým kódováním znaků členění na řádky je závislé na platformě a obvykle je dáno jedním nebo dvěma řídicími znaky (CR LF, 0x0d 0x0c, \r\n ) Program v jazyku Java pracuje se znaky jako s hodnotami typu char, které jsou zakódovany v 16-ti bitovém kódu Unicode Při práci s textovými soubory jsou proto třeba transformace mezi 16-ti bitovými hodnotami typu char a 8-mi bitovými znaky textového souboru Vytváření textového souboru z posloupnosti hodnot typu char s použitím implicitního kódování umožňuje třída FileWriter Čtení textového souboru jako posloupnosti hodnot typu char s použitím implicitního kódování umožňuje třída FileReader Pro OS Windows je implicitní kódování Cp1250 alg9 1

Příklad textového souboru Následující program zapíše do textové souboru znaky dané řetězcem a pak soubor přečte do pole prvků typu char a pole vypíše na obrazovku package alg9; import java.io.*; import sugar.sys; public class Text1 { public static void main(string[] args) throws Exception { FileWriter out = new FileWriter("text1.txt"); out.write("čau, nazdar"); out.close(); FileReader in = new FileReader("text1.txt"); char znaky[] = new char[20]; int pocet = in.read(znaky); for (int i=0; i<pocet; i++) Sys.p(znaky[i]); Soubor text1.txt si můžete prohlédnout textovým editorem alg9 2

Metody tříd FileWriter a FileReader Některé metody třídy FileWriter (všechny mohou vyhodit výjimku IOException) void write(int c) zapíše znak c void write(char[] cbuf) zapíše znaky z pole cbuf void write(string str) zapíše znaky tvořící řetězec str Některé metody třídy FileReader (všechny mohou vyhodit výjimku IOException) int read() vrátí přečtený znak; nejsou-li v souboru nepřečtené znaky, vrátí -1 int read(char[] cbuf) přečte znaky do pole cbuf a vrátí jejich počet; nejsou-li v souboru nepřečtené znaky, vrátí -1 alg9 3

Výstupní konverze Do textového souboru často potřebujeme zapisovat posloupnosti znaků tvořící zápisy čísel Řetězce tvořící dekadické zápisy čísel lze získat statickými metodami valueof třídy String Příklad: public class Text2 { public static void main(string[] args) throws Exception { FileWriter out = new FileWriter("text2.txt"); int a = 10, b = 20; out.write(string.valueof(a)); out.write("+"); out.write(string.valueof(b)); out.write("="); out.write(string.valueof(a+b)); out.close(); Program vytvoří textový soubor obsahující text 10+20=30 alg9 4

Třída PrintWriter Třída PrintWriter umožňuje vytvářet textový soubor pomocí metod, které: provádějí výstupní konverze primitivních typů oddělují řádky způsobem daným platformou Příklad: public class Text3 { public static void main(string[] args) throws Exception { PrintWriter out = new PrintWriter( new FileWriter("text3.txt")); int a = 10, b = 20; out.print(a); out.print("+"); out.print(b); out.print("="); out.println(a+b); out.println("konec programu"); out.close(); Program vytvoří soubor obsahující text 10+20=30 konec programu alg9 5

void print(t x) Metody třídy PrintWriter metoda je definovaná pro všechny primitivní typy, do souboru zapíše textovou reprezentaci hodnoty x void print(string str) zapíše znaky tvořící řetězec str; je-li str rovno null, zapíše se null void print(object o) zapíše textovou reprezentaci objektu o, která se získá voláním metody o.tostring(); je-li o rovno null, zapíše se null void println() zapíše oddělovač řádků void println(t x) zapíše textovou reprezentaci hodnoty x a zakončí řádek a další... Metody třídy PrintWriter nekončí vyhozením výjimky alg9 6

Čtení textového souboru po řádcích Třída FileReader umožňuje číst textový soubor po jednotlivých znacích nebo po skupinách znaků (ukládaných do pole znaků), přičemž oddělování řádků je závislé na platformě (dvojice řídicích znaků CR LF pod Widnows nebo jediný znak LF pod Unixem) Čtení textového souboru po řádcích nezávisle na platformě umožňuje třída BufferedReader Příklad: program který přečte textový soubor daný parametrem příkazového řádku a vypíše jej na obrazovku public class Text4 { public static void main(string[] args) throws Exception { if (args.length==0) { Sys.pln("použití: Text4 <vstup>"); return; BufferedReader in = new BufferedReader( new FileReader(args[0])); String radek = in.readline(); while (radek!=null) { Sys.pln(radek); radek = in.readline(); alg9 7

Metody třídy BufferedReader Všechny metody mohou vyhodit výjimku IOException int read() vrátí přečtený znak; nejsou-li v souboru nepřečtené znaky, vrátí -1 int read(char[] cbuf) přečte znaky do pole cbuf a vrátí jejich počet; nejsou-li v souboru nepřečtené znaky, vrátí -1 int read(char[] cbuf, int off, int len) přečte len znaků do cbuf počínaje indexem off, výsledkem je počet přečetných znaků; nejsou-li v souboru nepřečetné znaky, vrátí 1 String readline() přečte znaky až do konce řádku a vytvoří z nich řetězec (bez oddělovače řádků), který vrátí jako výsledek; nejsou-li v souboru nepřečtené znaky, vrátí null a další... alg9 8

Čtení textu po lexikálních elementech Textový soubor se často skládá z lexikálních elementů tvořených posloupnostmi znaků s určitou syntaxí Čtení textového souboru po lexikálních elementech umožňuje třída StreamTokenizer Třída rozlišuje 4 druhy lexikálních elementů (tokens): číslo (posloupnost dekadických číslic příp. začínající znaménkem a příp. obsahující desetinnou tečku) slovo (posloupnost písmen a číslic začínající písmenem) oddělovač řádku konec souboru alg9 9

Čtení textu po lexikálních elementech Příklad: public class Text5 { public static void main(string[] args) throws Exception { StreamTokenizer st = new StreamTokenizer( new FileReader("text5.txt")); st.eolissignificant(true); for (;;) { switch (st.nexttoken()) { case StreamTokenizer.TT_NUMBER: Sys.p(st.nval+" "); break; case StreamTokenizer.TT_WORD: Sys.p(st.sval+" "); break; case StreamTokenizer.TT_EOF: return; case StreamTokenizer.TT_EOL: Sys.pln(); break; alg9 10