Java in vhodno izhodne operacije

Slides:



Advertisements
Similar presentations
Jan Java I/O Yangjun Chen Dept. Business Computing University of Winnipeg.
Advertisements

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.
III. Streams. Introduction Often a program needs to bring in information from an external source or to send out information to an external destination.
CS-2852 Data Structures LECTURE 1B Andrew J. Wozniewicz Image copyright © 2010 andyjphoto.com.
Java I/O and Java Networking (Client Side) Yoshi.
Java I/O classes – case study in an OO library Flexible and somewhat slick, but a bit of a mess (though improving)
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.
Lecture 30 Streams and File I/O COMP1681 / SE15 Introduction to Programming.
Exceptions and IO Dr. Andrew Wallace PhD BEng(hons) EurIng
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/
Java File I/O (Continued). File I/O in Java Like every other programming language, Java supports the writing to and reading from different files with.
Stream: an object that either delivers data to its destination (screen, file, etc.) or that takes data from a source (keyboard, file, etc.) –it acts as.
5-Oct-15 Air Force Institute of Technology Electrical and Computer Engineering Object-Oriented Programming Design Topic : Streams and Files Maj Joel Young.
Input / Output Chapter 13.  We use files all the time  Programs are files  Documents are files  We want them to be “permanent”  To last beyond execution.
Prepared by : A.Alzubair Hassan Kassala university Dept. Computer Science Lecture 2 I/O Streams 1.
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,
Copyright © Curt Hill Java I/O Flexibility and Layering.
I / O in java. java.io BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter ByteArrayInputStream ByteArrayOutputStream CharArrayReader.
Files Chap. 10 Streams, Readers, Writers 1. 2 Problem In our array example, we entered the students' names and scores from the keyboard. In many situations.
Miscellaneous topics Chapter 2 Savitch. Miscellaneous topics Standard output using System.out Input using Scanner class.
The Java I/O Classes and Interfaces cont’d
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.
Two Ways to Store Data in a File  Text format  Binary format.
5-Dec-15 Sequential Files and Streams. 2 File Handling. File Concept.
1 Software 1 Java I/O. 2 The java.io package The java.io package provides: Classes for reading input Classes for writing output Classes for manipulating.
Chapter 10 Text Files Section 10.2 Slides prepared by Rose Williams, Binghamton University Kenrick Mock, University of Alaska Anchorage.
CS 116 OBJECT ORIENTED PROGRAMMING II LECTURE 11 GEORGE KOUTSOGIANNAKIS Copyright: 2015 / Illinois Institute of Technology/George Koutsogiannakis 1.
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.
 Learn about computer files  Use the Path class  Learn about  Streams  Buffers  file organization  Use Java’s IO classes to write to and read from.
Exception Handling, Reading and Writing in Files, Serialization, Exceptions, Files, Streams, File Readers and Writers, Serializable SoftUni Team Technical.
Strings and File I/O. Strings Java String objects are immutable Common methods include: –boolean equalsIgnoreCase(String str) –String toLowerCase() –String.
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.
Java I/O 1. Java I/O (Input and Output) is used to process the input and produce the output based on the input. The java.io package contains all the classes.
CS 116 Object Oriented Programming II Lecture 11 Acknowledgement: Contains materials provided by George Koutsogiannakis and Matt Bauer.
CS202 Java Object Oriented Programming Input and Output Chengyu Sun California State University, Los Angeles.
Java IO Exploring the java.io package and living to talk about it.
The Java IO System Different kinds of IO Different kinds of operations
Keerthi Nelaturu Url: site.uottawa.ca/~knela006
Lecture 8: I/O Streams types of I/O streams Chaining Streams
CSG2H3 Object Oriented Programming
Java Text I/O CS140 Dick Steflik. Reader Abstract super class for character based input Subclasses: – BufferedReader – CharArrayReader – FilterReader.
Exception Handling, Reading and Writing in Files, Serialization,
OO Design and Programming II I/O: Reading and Writing
Strings and File I/O.
12: The Java I/O System stream model.
I/O Basics.
Java Methods ("Chapter %d", 14); Streams and Files A & AB
File.
תרגול מס' 5: IO (קלט-פלט) זרמי קלט וזרמי פלט ((Input & Output Streams,
CSS161: Fundamentals of Computing
Објектно орјентисано програмирање
Grafični vmesnik - GUI Izdelava obrazca: lastnosti, odzivne metode
Java’s Hierarchy Input/Output Classes and Their Purpose
Методика наставе рачунарства
תרגול מס' 5: IO (קלט-פלט) זרמי קלט וזרמי פלט ((Input & Output Streams,
Ugani število Napišimo program, ki si “izmisli” naključno število, potem pa nas v zanki sprašuje, katero je izmišljeno število. Če število uganemo, nas.
Files and Streams.
OBJECT ORIENTED PROGRAMMING II LECTURE 20 GEORGE KOUTSOGIANNAKIS
Files and Streams in Java
មជ្ឈមណ្ឌលកូរ៉េ សហ្វវែរ អេច អ ឌី
Web Design & Development Lecture 8
EEC 484/584 Computer Networks
Java IO Packages Prepared by Mrs.S.Amudha AP/SWE
David Davenport Spring 2005
Presentation transcript:

Java in vhodno izhodne operacije Alenka Kavčič alenka.kavcic@fri.uni-lj.si

DATOTEKE IN TOKOVI V JAVI: pregled in uporaba v praksi Alenka Kavčič alenka.kavcic@fri.uni-lj.si

Pregled vsebine Datoteke v Javi Tokovi v Javi Kako beremo besedilo branje in pisanje datotek Tokovi v Javi pregled primeri uporabe tokov Kako beremo besedilo učinkovito in enostavno primer uporabe bralnika V paketu java.io najdemo razrede za delo z vhodom in izhodom, tudi z datotekami preko 50 razredov in vmesnikov

Potrebno predznanje Osnovni koncepti OO programiranja v Javi razredi, objekti dedovanje Izjeme in obravnava izjem kaj so izjeme vrste izjem preverjene (Exception) nepreverjene (Error, RuntimeException) obravnava izjem prestrezanje izjem, proženje izjem razglašanje izjem (posredovanje naprej)

Datoteke Kaj je datoteka shranjeni podatki na disku, CD-ju, USB ključku, ... datoteke s podatki uporabnika slike, zapiski, glasba, ... datoteke s programi izvorna koda, prevedeni programi, aplikacije vsaka datoteka zaseda prostor na disku (velikost) ima ime (skupaj s potjo v datotečnem sistemu) čas kreiranja ostali atributi

Razred java.io.File Predstavitev datoteke v programu dostop do podatkov o datoteki ali obstaja; lahko beremo/pišemo je navadna datoteka; je direktorij je odprta velikost datoteke ni odpiranja, zapiranja, procesiranja vsebine!

Konstruktor razreda File Več različnih konstruktorjev Najpogosteje podamo niz z imenom datoteke Ime lahko vsebuje tudi pot zapis poti na Windows in Linux je različen pozor: znak \ je del ubežne sekvence v Javi File datoteka = new File("ime.txt"); File datoteka = new File("/home/vaje/ime.txt"); File datoteka = new File("C:\\prog2\\vaje\\ime.txt");

Branje/pisanje datotek Zaporeden dostop do podatkov tokovi bajti, znaki formatirano, podatki imajo tipe: int, double, String, ... Naključen dostop do podatkov nezaporedna uporaba podatkov datoteke z naključnim dostopom Pred uporabo datoteko odpremo ustvarimo nov objekt in z njim povežemo tok klic konstruktorja Po uporabi datoteko zapremo sprostimo vire, ki jih zaseda

vir slik: The Java Tutorials Vhodno izhodni tokovi Za zaporeden dostop do podatkov tok je zaporedje podatkov deluje kot cevovod ali kanal do V/I naprav datoteke, naprave, drugi programi, omrežna vtičnica, ... Vhodne operacije vhodna naprava --> aplikacija Izhodne operacije aplikacija --> izhodna naprava Izhodni tok: zapisuje na ponor, en element naenkrat Vhodni tok: bere iz vira, en element naenkrat vir slik: The Java Tutorials

Tokovi (streams) Tok je objekt Večina tokov teče le v eno smer metode omogočajo akcije odpiranje, zapiranje branje, pisanje, izpiranje (flushing) za različne vrste podatkov bajti, primitivni podatkovni tipi, lokalizirani znaki, objekti Večina tokov teče le v eno smer ali vhodni ali izhodni Aplikacija ima lahko hkrati odprtih več tokov Datoteke z naključnim dostopom tokovi tečejo v obe smeri razred implementira vmesnika za vhodni in izhodni tok

TOKOVI BINARNI ZNAKOVNI IZHODNI VHODNI VHODNI IZHODNI InputStream OutputStream Reader Writer

Binarni tokovi Temeljni tokovi Prenašajo se bajti vsi ostali tipi tokov temeljijo na njih Prenašajo se bajti skladno z vsebino tipa byte 8 bitov Osnovna razreda InputStream, OutputStream za datoteke: FileInputStream, FileOutputStream

Primer: Kopiranje datoteke import java.io.*; public class Kopiraj { public static void main(String[] args) throws IOException { if(args.length < 2) { System.out.println("Uporaba: java Kopiraj <izvor> <ponor>"); System.exit(1); } InputStream vhod = new FileInputStream(args[0]); OutputStream izhod = new FileOutputStream(args[1]); int bajt; while( (bajt = vhod.read()) != -1 ) izhod.write(bajt); vhod.close(); izhod.close(); DEMO

Vhodno izhodne izjeme Razred IOException Izjeme se lahko sprožijo preverjene izjeme Izjeme se lahko sprožijo branje iz toka, pisanje v tok odpiranje (klic konstruktorja), zapiranje toka Izjemo moramo obravnavati ujamemo (try-catch-finally) posredujemo naprej (throws)

Izjeme public void metoda() throws Izjema { ... } try { // klic metode, ki lahko sproži izjemo } catch(Izjema e) { // ujamemo in obravnavamo izjemo e finally { // zaključimo

Binarni tok (Byte stream) import java.io.FileOutputStream; import java.io.IOException; public class CopyBytes { public static void main(String[] args) throws IOException { FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("xanadu.txt"); out = new FileOutputStream(“izhod.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } } finally { if (in != null) { in.close(); if (out != null) { out.close(); Demo

Znakovni tokovi Prenašajo se znaki Osnovna razreda Reader in Writer znaki v Javi so shranjeni v Unicode (16-bitni kod) samodejno se prevedejo v lokalni nabor znakov skladno z vsebino tipa char Osnovna razreda Reader in Writer za datoteke: FileReader, FileWriter Bajt-znak most: razreda InputStreamReader, OutputStreamWriter za pretvorbo bajtov iz toka v znakovni tok znakovni tokovi uporabljajo binarne tokove za branje/pisanje (fizični V/I) ter le spremenijo bajte v znake

Primer 2: Kopiranje besedila import java.io.*; public class Kopiraj { public static void main(String[] args) throws IOException { if(args.length < 2) { System.out.println("Uporaba: java Kopiraj <izvor> <ponor>"); System.exit(1); } FileReader vhod = new FileReader(args[0]); FileWriter izhod = new FileWriter(args[1]); int znak; while( (znak = vhod.read()) != -1 ) izhod.write(znak); vhod.close(); izhod.close();

Tok znakov (Character stream) import java.io.FileWriter; import java.io.IOException; public class CopyCharacters { public static void main(String[] args) throws IOException { FileReader inputStream = null; FileWriter outputStream = null; try { inputStream = new FileReader("vhod.txt"); outputStream = new FileWriter("izhod.txt"); int c; while ((c = inputStream.read()) != -1) { outputStream.write(c); } } finally { if (inputStream != null) { inputStream.close(); if (outputStream != null) { outputStream.close(); Demo

Branje in izpis cele vrstice public class CopyLines { public static void main(String[] args) throws IOException { BufferedReader inputStream = null; PrintWriter outputStream = null; try { inputStream = new BufferedReader(new FileReader("vhod.txt")); outputStream = new PrintWriter(new FileWriter("izhod.txt")); String l; while ((l = inputStream.readLine()) != null) { outputStream.println(l); } } finally { if (inputStream != null) inputStream.close(); if (outputStream != null) outputStream.close(); Demo

Tokovi Za branje/pisanje datotek File... Za filtriranje podatkov ob branju/pisanju Filter... in njegovi podrazredi formatirano: Data... podatkov ponavadi ne beremo po bajtih (znakih) imajo tipe: int, double, String, ... preko medpomnilnika: Buffered... Za branje/pisanje poljubnih objektov Object... zaporedna predstavitev (serializacija) objektov objekt se razčleni na zaporedje bajtov binarni tok

BufferedOutputStream java.io binarni tokovi InputStream RandomAccessFile FileInputStream BufferedInputStream DataInputStream ObjectInputStream FilterInputStream File znakovni tokovi Reader FileReader BufferedReader InputStreamReader OutputStream FileOutputStream BufferedOutputStream DataOutputStream PrintStream ObjectOutputStream FilterOutputStream Writer FileWriter BufferedWriter PrintWriter OutputStreamWriter java.util Scanner

Podatkovni tokovi (Data Streams) Branje primitivnih tipov iz datoteke DataInputStream DataOutputStream … int double boolean InputStream basic = new FileInputStream(“podatki.dat”); DataInputStream data = new DataInputStream(basic); int i = data.readInt(); boolean b = data.readBoolean(); double d = data.readDouble();

Primer s podatkovnimi tokovi 19.99 12 Kumarice 9.99 8 Pivo 28.99 1 Kruh … Datoteka z naročilom vsebuje binarno kodirano: try{ while (true) { price = data.readDouble(); unit = data.readInt(); desc = data.readUTF(); System.out.println("Narocili ste: " + desc); total = total + unit * price; } } catch (EOFException e) { System.out.println("Skupen znesek : $" + total); } catch (IOException e) {} Demo 24

Tokovi objektov (object streams) Branje in zapisovanje kompleksnih objektov Object ob = new Object(); out.writeObject(ob); out.writeObject(ob); Object ob1 = in.readObject(); Object ob2 = in.readObject(); Demo

Ovijanje tokov Sestavljanje ali povezovanje tokov dveh ali več tokov obstoječi tok podtaknemo konstruktorju drugega toka zanimajo nas metode zadnjega toka v verigi Branje preko medpomnilnika (buffer) Formatirano branje/pisanje FileReader tok = new FileReader("dat.txt"); BufferedReader medpom = new BufferedReader(tok); String vrstica = medpom.readLine(); FileInputStream tok = new FileInputStream("stevila.dat"); BufferedInputStream medpom = new BufferedInputStream(tok); DataInputStream podatki = new DataInputStream(medpom); int stevilo = podatki.readInt();

Standardni tokovi Standardni izhod (System.out) izhod na sistemsko standardno izhodno napravo privzeto zaslon razred PrintStream Standardni vhod (System.in) vhod s sistemske standardne vhodne naprave privzeto tipkovnica razred BufferedInputStream preko medpomnilnika; uporaba tipk Enter, Backspace Standardni izhod za napake (System.err)

Primer: Izpis tekstovne datoteke na zaslon po vrsticah ... BufferedReader vhod = new BufferedReader(new FileReader(new File(args[0]))); String vrstica; while( (vrstica = vhod.readLine()) != null ) System.out.println(vrstica); vhod.close();

Primer 4: Branje standardnega vhoda in zapis v datoteko ... BufferedReader vhod = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter izhod = new BufferedWriter(new FileWriter(args[0])); String vrstica; while( (vrstica = vhod.readLine()) != null ) { izhod.write(vrstica); izhod.newLine(); // izhod.flush(); } izhod.close(); Vsako vrstico moramo zaključiti z Enter, vnos pa zaključimo s Ctrl+Z (EOF).

Program za vajo (doma) Napiši program Echo, ki bere standardni vhod (s tipkovnice) in prebrano zapisuje na standardni izhod (na zaslon) Program Echo dopolni tako, da bo njegovo delovanje odvisno od podanih argumentov: kot argument podano ime datoteke program bere iz te datoteke kot argument podano -o in ime datoteke program piše v to datoteko java Echo java Echo ime.txt java Echo -o ime.txt java Echo ime1.txt -o ime2.txt

Formatiran vhod/izhod Formatirano branje/pisanje podatkov DataInputStream, DataOutputStream Kaj uporabiti v praksi? enostavna uporaba prilagodljivost, moč Tekstovne datoteke PrintWriter (java.io) Scanner (java.util)

Razred java.io.PrintWriter Formatirano predstavitev objekta zapiše v tekstovni izhodni tok Metode za izpis implementira vse metode razreda PrintStream print, println, printf, ... poznamo od System.out Konstruktorji z različnimi argumenti String (ime datoteke), File OutputStream, Writer vključimo lahko tudi samodejno izpiranje

Razred java.util.Scanner Preprost bralnik teksta besedilo razčleni izlušči primitivne podatkovne tipe in nize znakov s pomočjo regularnih izrazov Vhod razbije na elemente z uporabo ločitvenega vzorca privzeto prazen prostor (whitespace) Ob branju elemente pretvori v različne tipe različne metode za branje

Konstruktorji razreda Scanner podan argument je vir podatkov File, InputStream String (to ni ime datoteke!) bere iz podanega niza Na koncu moramo bralnik zapreti close()

Metode razreda Scanner Ali je še kakšen element na vhodu hasNext() hasNextInt(), hasNextDouble(), hasNextLine(), ... Preberi naslednji element next() nextInt(), nextDouble(), nextLine(), ... Sprememba ločila med elementi useDelimiter(String vzorec) vzorec določa ločilo (regularni izraz) ":", "\\s", "\\n", "\\t", "[^\\w]+", "a|b", ...

Skeniranje vhoda import java.io.*; import java.util.Scanner; public class ScanInput { public static void main(String[] args) throws IOException { Scanner s = null; try { s = new Scanner(new BufferedReader(new FileReader("vhod.txt"))); while (s.hasNext()) { System.out.println(s.next()); } } finally { if (s != null) { s.close(); Demo

Skeniranje številčnih podatkov import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; import java.util.Scanner; import java.util.Locale; public class ScanStevila { public static void main(String[] args) throws IOException { Scanner s = null; double sum = 0; try { s = new Scanner( new BufferedReader(new FileReader("stevila.txt"))); s.useLocale(Locale.US); while (s.hasNext()) { if (s.hasNextDouble()) { sum += s.nextDouble(); } else { s.next(); } } } finally { s.close(); } System.out.println(sum); } } Demo

Izpis spremenljivk na zaslon public class KvadratniKoren { public static void main(String[] args) { int i = 2; double r = Math.sqrt(i); System.out.print("Kvadratni koren od "); System.out.print(i); System.out.print(" je "); System.out.print(r); System.out.println("."); i = 5; r = Math.sqrt(i); System.out.println("Kvadratni koren od " + i + " je " + r + "."); } Demo

Formatirani izpis public class KvadratniKoren2 { public static void main(String[] args) { int i = 2; double r = Math.sqrt(i); System.out.format("Kvadratni kored od %d je %f.%n", i, r); } Demo

Java in printf Metoda printf( ) avtomatsko uporablja Formatter za tvorbo formatiranega niza. Metoda printf( ) je definirana za PrintStream in PrintWriter. Za PrintStream, printf( ) ima naslednji obliki: PrintStream printf(String fmtString, Object ... args) PrintStream printf(Local loc, String fmtString, Object ... args) Prva oblika piše argumente na standardni izhod v formatu, ki ga definira fmtString, in pri tem uporablja privzeti (default) locale. Druga oblika omogoča specificiranje lokala. Demo

Primer: Branje podatkov o študentih in zapis v drugo datoteko Datoteka studenti.txt ima podatke o študentih vsak študent v svoji vrstici posamezni podatki ločeni s podpičjem 63070279;Ime;Priimek;10 63070264;Ana Marija;Ficko;10 63060043;Janez;Novak Erhar;9 63060053;Mojca;Pokraculja;8 63070284;Zelo Slabo;Znanje de Neznanje;5 63060047;Dobra;Vila;6 63070223;Bedanc;Grozni;7 63070260;Kekec;Samsvoj;9 63070281;Franci;Nekdo;5 63060561;Mirko;Stegnar;10 63060058;Janko;Novak;5

Kombiniran primer (Scanner in PrintWriter) import java.util.*; ... Scanner bralnik = new Scanner(new File(args[0])); PrintWriter izhod = new PrintWriter(args[1]); bralnik.useDelimiter(";|\\r\\n"); // za Windows okolje! double vsota = 0.0; int skupaj = 0; while( bralnik.hasNext() ) { String vpisna = bralnik.next(); bralnik.next(); // ime ignoriramo bralnik.next(); // priimek ignoriramo int ocena = bralnik.nextInt(); vsota += ocena; skupaj++; izhod.printf("%s %2d%n", vpisna, ocena); } bralnik.close(); izhod.close(); System.out.printf("Skupaj je pisalo %d studentov, povprecna ocena je %.2f%n", skupaj, vsota/skupaj); DEMO