Streamy pojem stream životný cyklus streamu súborové streamy výnimky

Slides:



Advertisements
Similar presentations
1 Streams and Input/Output Files Part 2. 2 Files and Exceptions When creating files and performing I/O operations on them, the systems generates errors.
Advertisements

Introduction to Java 2 Programming Lecture 7 IO, Files, and URLs.
Lecture 15: I/O and Parsing
MOD III. Input / Output Streams Byte streams Programs use byte streams to perform input and output of 8-bit bytes. This Stream handles the 8-bit.
Streams Dwight Deugo Nesa Matic Portions of the notes for this lecture include excerpts from.
James Tam Simple File Input And Output Types of Java Files Simple File Output in Java Simple File Input in Java.
James Tam Simple file handling in Java Simple File Input And Output Types of Java files Simple file output in Java Simple file input in Java.
James Tam Simple File Input And Output Types of Java Files Simple File Output in Java Simple File Input in Java.
Java I/O – what does it include? Command line user interface –Initial arguments to main program –System.in and System.out GUI Hardware –Disk drives ->
7/2/2015CS2621 OO Design and Programming II I/O: Reading and Writing.
Exceptions and IO Dr. Andrew Wallace PhD BEng(hons) EurIng
פיתוח מונחה עצמים – שפת JAVA קבצים. References קורס "שיטות בהנדסת תוכנה", הפקולטה למדעי המחשב, הטכניון. קורס "מערכות מידע מבוזרות", הפקולטה להנדסת תעשייה.
Java I/O Input: information brought to program from an external source
Java Programming: I/O1 Java I/O Reference: java.sun.com/docs/books/tutorial/essential/io/
Two Ways to Store Data in a File Text format Binary format.
5-Oct-15 Air Force Institute of Technology Electrical and Computer Engineering Object-Oriented Programming Design Topic : Streams and Files Maj Joel Young.
Prepared by : A.Alzubair Hassan Kassala university Dept. Computer Science Lecture 2 I/O Streams 1.
1 Java Console I/O Introduction. 2 Java I/O You may have noticed that all the I/O that we have done has been output The reasons –Java I/O is based on.
Streams Reading: 2 nd Ed: , rd Ed: 11.1, 19.1, 19.4
Chapter 9 1 Chapter 9 – Part 1 l Overview of Streams and File I/O l Text File I/O l Binary File I/O l File Objects and File Names Streams and File I/O.
Based on OOP with Java, by David J. Barnes Input-Output1 The java.io Package 4 Text files Reader and Writer classes 4 Byte stream files InputStream, FileInputStream,
File IO Basics By Dan Fleck Coming up: Data Streams.
Input/output Input in java is stream based.A stream represents sequence of bytes or characters. Stream provides an abstract view of I/O. Stream can be.
© Amir Kirsh Files and Streams in Java Written by Amir Kirsh.
CS101 Lab “File input/Output”. File input, output File : binary file, text file READ/WRITE class of “text file” - File Reading class : FileReader, BufferedReader.
CIS Intro to JAVA Lecture Notes Set 6 2-June-05.
Dôležité triedy a interface: Cipher MAC SecureRandom KeyGenerator KeyPairGenerator Signature KeyStore.
CSI 3125, Preliminaries, page 1 Java I/O. CSI 3125, Preliminaries, page 2 Java I/O Java I/O (Input and Output) is used to process the input and produce.
I/O Basics 26 January Aside from print( ) and println( ), none of the I/O methods have been used significantly. The reason is simple: most real.
Exception Handling, Reading and Writing in Files, Serialization, Exceptions, Files, Streams, File Readers and Writers, Serializable SoftUni Team Technical.
Java Input/Output. Java Input/output Input is any information that is needed by your program to complete its execution. Output is any information that.
Java Input / Output l a modular approach to input/output: - different stream objects are connected/wrapped to handle I/O l a data stream object: a flow.
1 Input-Output A complex issue in programming language design. The interface to the outside world. –Differences must be accommodated as transparently as.
YOUR LOGO Class, members, delegate, generic. YOUR LOGO Access modifiers ModifierExplanation privateThe member is visible only in the class. publicThe.
CS202 Java Object Oriented Programming Input and Output Chengyu Sun California State University, Los Angeles.
CSC1351 Class 6 Classes & Inheritance.
Keerthi Nelaturu Url: site.uottawa.ca/~knela006
Lecture 8: I/O Streams types of I/O streams Chaining Streams
Exception Handling, Reading and Writing in Files, Serialization,
OO Design and Programming II I/O: Reading and Writing
Lesson 8: More File I/O February 5, 2008
12: The Java I/O System stream model.
I/O Basics.
Sme produkty, musíme sa predať
Prednáška 8 podprogramy typy podprogramov lokálne a globálne objekty
תרגול מס' 5: IO (קלט-פלט) זרמי קלט וזרמי פלט ((Input & Output Streams,
Motivácia Ukážky vypracovaných projektov: Projekt 1 , Projekt 2 , Projekt 3 Opakovanie HTML Kaskádové štýly alebo CSS Java Script PHP SQL Značka pre telo.
Procedurálne programovanie: 2. prednáška
Typy informácií a ich prezentácia a spracovanie
Konfigurácia a testovanie
Integritné obmedzenia v SQL
JAVA IO.
הרצאה 12: קבצים וחריגות (Exceptions)
תרגול מס' 5: IO (קלט-פלט) זרמי קלט וזרמי פלט ((Input & Output Streams,
TrueCrypt Šifrovanie diskov Vladimír Tkáč.
Dvojrozmerné polia Kód ITMS projektu:
Reading and Writing Text Files
Smelý Palko v Ohiu alebo pán Turing ide voliť
Patrik Ort Acount Executive , Stredná Európa
Korytnačky na farme a korytnačí futbal
Text File Read and Write Method
Files and Streams in Java
មជ្ឈមណ្ឌលកូរ៉េ សហ្វវែរ អេច អ ឌី
Web Design & Development Lecture 8
Streams and Readers The stream hierarchy is for reading bytes, the reader/writer hierarchy is for reading characters Unicode characters can be used internationally,
ECE 122 April 14, 2005.
EEC 484/584 Computer Networks
Java IO Packages Prepared by Mrs.S.Amudha AP/SWE
David Davenport Spring 2005
Presentation transcript:

Streamy pojem stream životný cyklus streamu súborové streamy výnimky binárny textový životný cyklus streamu súborové streamy výnimky bufferované streamy stream a klávesnica

Vstupno-výstupné operácie ak chceme získavať údaje z, alebo posielať údaje do miesta iného ako náš program, potrebujeme vytvoriť komunikačný kanál pre prenos informácií kanál označuje sa ako stream možno si ho predstaviť ako trubku (stream), ktorej koniec máme k dispozícii z trubky nám môžu údaje vypadávať (po jednom, sekvenčne za sebou) alebo ich do nej môžeme vkladať (opäť po jednom) prostredníctvom streamov vieme pristupovať k: pamäti súboru používateľskému vstupu/výstupu IP sieti a pod.

Streamy v Jave knižnica java.io obsahuje komplexnú hierarchiu (viď tutorial) základné rozdelenie: binárne (abstraktné triedy InputStream, OutputStream) pracujú so surovými bajtami (číselné hodnoty reprezentujúce napr. znaky – ASCII, Unicode) textové (abstraktné triedy Reader, Writer) prekladajú bajty (resp. skupiny bajtov) podľa nastavenia prostredia: 1 znak = 1 alebo 2 bajty 3

Základy práce so streamom životný cyklus: vytvorenie otvorenie – stream sa často otvára už pri vytvorení, pokiaľ však otvorený nebol, je nutné túto operáciu vykonať (alokácia potrebných systémových prostriedkov) vlastná práca – vykonávajú sa potrebné operácie (volanie metód streamu) uzatvorenie – nutné z dôvodov: nezapísania údajov v cache zablokované pre ostatné objekty/procesy/používateľov 4

Ošetrenie chýb všetky chybové stavy sú riešené výnimkami základná výnimka IOException výnimka je povinná bez jej použitia program neskompilujete je spoločná pre všetky streamy každý príkaz streamu v nej musí byť uzavretý 5

Súborový stream FileInputStream, FileOutputStream – príklad Vygenerujte pole náhodných čísel a zapíšte ho do súboru. 6

Riešenie - počiatočné public static void main(String[] args) { int[] pole= new int[10]; // nacitanie hodnot do pola for(int i=0;i<pole.length;i++) { pole[i] = (int) (Math.random()*100); } // vytvorenie vystupneho streamu na subor „udaje.dat“ // a sucasne jeho otvorenie/vytvorenie OutputStream ff = new FileOutputStream("udaje.dat"); // zapis do streamu ff – zapisuje sa hodnota bajt ff.write(pole[i]); // uzatvorenie file streamu ff.close(); 7

Riešenie - problém 8

Zdroj problému už spomenutá výnimka udalosť, ktorá vzniká počas behu programu a prerušuje normálny tok inštrukcií obvykle ide o chybu výnimky sa odchytávajú prostredníctvom bloku try – catch – finally try = skús ohraničuje blok príkazov, v ktorom môže dôjsť k chybe catch = odchyť (chybu) ukončuje blok príkazov a zároveň popisuje, čo sa má stať, ak ku chybe došlo (napr. vypísať info) finally = ukončenie kód, ktorý sa má vykonať aj v prípade výnimky, aj ak k nej nedôjde (napr. uvoľnenie pamäte) 9

Príklad výnimky int i; String s; ... try { i=Integer.parseInt(s); } catch(NumberFormatException e) System.out.println("Retazec nie je cislo!"); 10

Príklad výnimky II. IOException – vstupno/výstupná výnimka ... try { subor.close(); } catch (IOException e) System.out.println("Chyba:"+e.getMessage()); IOException – vstupno/výstupná výnimka detailnú informáciu o nej možno získať z metódy getMessage 11

Vráťme sa k súboru int[] pole= new int[10]; public static void main(String[] args) { int[] pole= new int[10]; for(int i=0;i<pole.length;i++) { pole[i] = (int) (Math.random()*100); System.out.println(pole[i]); } try { OutputStream ff = new FileOutputStream("udaje.dat"); ff.write(pole[i]); ff.close(); } catch (IOException e) { // ak pride k chybem vypise sa ku akej System.out.println(e.getMessage()); 12

Údaje v súbore zápis nám uložil údaje, tu sú ich podoby 65 38 44 60 18 47 74 27 14 36 13

Načítanie údajov - analógia // nacitavame aj znak konca suboru, pole musi byt vacsie int[] pole= new int[20]; int i=0; // ukazovatel na nacitavany prvok v poli try { // InputStream sluzi na citanie InputStream ff = new FileInputStream("udaje.dat"); do { pole[i] = ff.read(); // do pole[i] nacita bajt z ff i++; // dalsi prvok // ak sa precita -1 je to info o konci suboru } while (pole[i]>-1); ff.close(); // zavretie suboru } catch (IOException e) { // lapame vynimku System.out.println(e.getMessage()); // vypis detailu } 14

Overenie funkčnosti výnimky ak si chcete overiť fungovanie odchytávania chýb, vymažte súbor a spustite program, ktorý sa ho pokúsi otvoriť 15

Textový súbor prepíšte obsah súboru na text a pokúste sa ho v Jave prečítať a vypísať v textovej podobe. čítanie a výpis predošlým spôsobom zrejme veľa úžitku neprinesie prečítané údaje (bajt) pretypujeme na char (pretypovanie poznáme už z minulej prednášky): je však potrebné ošetriť prečítanie konca súboru pretypovanie hodnoty -1 na char vráti nedefinovanú hodnotu 16

Čítanie znakov char[] pole = new char[20]; // pole je znakove int cislo,i=0; try { InputStream ff = new FileInputStream("udaje.dat"); do { cislo = ff.read(); // precita udaj zo suboru ako bajt if (cislo>-1) { // ak nie je koniec pole[i] = (char) cislo; // pretypuje udaj na char i++; // zvysi pocet precitanych prvkov } } while (cislo>-1); // a zisti ci bol koniec suboru ff.close(); // zavrie subor } catch (IOException e) { System.out.println(e.getMessage()); } 17

Diskusia čítanie súboru po bytoch však nie je naším cieľom v prípade Unicode by sme už museli znak vytvárať z dvojice bajtov a počas práce by sme určite narazili na množstvo ďalších obmedzení práca s bajtami je navyše veľmi neefektívna: každé prečítanie a každý zápis sa vykonáva priamo na zdroji (na fyzickom zariadení) => zaťažovanie súborového systému, zdržiavanie, opotrebúvanie hardvéru atď. pre prácu s textom, ktorá tvorí veľkú väčšinu práce je žiaduce používať „bezpečnejšie“ typy: Reader, Writer 18

Bufferované streamy streamy, ktoré okrem základných operácií obsahujú buffer (vyrovnávaciu pamäť) a sadu ďalších operácií, prostredníctvom ktorých optimalizujú prístup k údajom bufferovaný stream vytvárame obvykle tak, že mu ako vstupný parameter konštruktora zadáme podriadený stream, napr.: BufferedReader br = new BufferedReader(new FileReader("subor.txt")); umožňuje čítanie riadkov: s = br.readLine() najvrchnejší „stream“ pri svojom zavretí uzavrie aj všetky „nižšie postavené“ 19

Textový súbor Napíšte program schopný prečítať zadaný textový súbor po riadkoch a vypísať ich. 20

Riešenie String riadok; try { // vytvorim filereader na čítanie z textového suboru FileReader ff = new FileReader("udaje.txt"); // „zabalim ho“ do bufferovanej triedy BufferedReader subor = new BufferedReader (ff); do { riadok = subor.readLine(); // precitam riadok // ak nebol koniec suboru (hodnota null) vypisem if (riadok != null ) System.out.println(riadok); } while (riadok != null); // kym nie je koniec sub. subor.close(); // zavriem najvrchnejsi stream } catch (IOException e) { System.out.println(e.getMessage()); 21

Textový súbor Napíšte program, ktorý vygeneruje zadaný počet náhodných celých čísel a uloží ich do textového súboru. pri riešení použite InputDialog, v našom riešení nastavíme hodnotu v kóde 22

Textový súbor Zabezpečte, aby každé číslo bolo uložené v osobitnom riadku. 23

Riešenie int cislo, pocet=10; String txt; try {// pre zapis zase File- a Buffered-Writer FileWriter ff = new FileWriter("cisla.txt"); BufferedWriter subor = new BufferedWriter (ff); for(int i=0;i<pocet;i++) { cislo = (int) (-500+Math.random()*1001); // nah. cislo txt = Integer.toString(cislo); // prevod na string subor.write(txt);// zapis textu do suboru subor.newLine(); // odriadkovanie, resp. doplnenie „/n“ } subor.close(); // zatvorenie suboru catch (IOException e) { System.out.println(e.getMessage()); } 24

Štandardný vstup (klávesnica) údaje prichádzajú do programu cez buffer na začiatku bolo preto pre nás jednoduchšie volať InputDialog, ktorý vracal string niekedy je však nevyhnutné použiť aj konzolový vstup 25

Štandardný vstup (kód) cez InputStreamReader „tečú“ znaky z System.in a následne sa preklápajú do BufferredReadera, odkiaľ už vieme prečítať celý riadok try { // vytvorim kb ako stream zo vstupu InputStreamReader kb = new InputStreamReader (System.in); // „obalim“ ho buferom BufferedReader bufer = new BufferedReader (kb); // ten disponuje metodou na precitanie riadku // ukoncenie riadku na vstupe oznamim Enterom String vstup = bufer.readLine(); // koniec prace s buferom bufer.close(); }catch (IOException e) { System.out.println(e.getMessage()); } 26

Štandardný vstup po znakoch analógia, čítam vstup kým nestlačím Enter následne sa začne spracúvať buffer vstupy prekladám z bajtov na char prípadne vkladám do stringu moje vstupy dôležitou je podmienka ukončenia napr. Enter? (ukončovací znak \n) iný znak (0, x a pod.) 27

Štandardný vstup po znakoch String vstup=""; char znak; int i=0; try { InputStreamReader kb = new InputStreamReader(System.in); BufferedReader bufer = new BufferedReader (kb); do { i = bufer.read(); // udaj vstupi ako cislo bajt znak = (char) i; // pretypuje sa na znak // prida sa k vstupnemu retazcu vstup = vstup + String.valueOf(znak); System.out.println("data:"+vstup); // kontrolny vypis } while (znak != '\n'); // ukoncovacia podmienka-ENTER bufer.close(); // uzatvorenie buffera } catch (IOException e) { System.out.println(e.getMessage());} 28

Príklady na riešenie Napíšte program, ktorý pre číselné údaje uložené v súbore „data.txt“ ako text – každé číslo na samostatnom riadku, nájde maximum. V textovom súbore, ktorého názov zadajte prostredníctvom InputDialogu nájdite: najdlhší a najkratší riadok (vypíšte ich poradové číslo a obsahujúci text), najdlhšie a najkratšie slovo (vypíšte slová), * všetky slová, ktoré neobsahujú samohlásky. Zistite, koľko sa v zadanom súbore nachádza: riadkov, slov, viet. Skopírujte údaje zo súboru data.txt do súboru data1.txt tak, že veľké písmená zameníte za malé a malé za veľké. Pre zadaný súbor zistite počty jednotlivých písmen (‘a’-’z’, ‘A’-’Z’). V záverečnom výstupe vypíšte len tie písmená, ktoré sa v súbore nachádzajú aspoň raz. Pre zadaný súbor vytvorte súbor „zrkadlo.txt“, v ktorý bude obsahovať: zrkadlové riadky pôvodného súboru *v každom riadku budú zrkadlové obrazy slov (napr. mama ma emu – amam am ume) 29