250 likes | 409 Views
Programare Orientata Obiect. Curs 11 Pachetul I/O. Continutul cursului. Introducere Platforma Java, Clase si Obiecte Modificatori, Constructori Pachete. Incapsularea datelor Mostenirea / Extinderea claselor Conversii de date. Clase si metode abstracte Interfete Exceptii (I)
E N D
Programare Orientata Obiect Curs11 Pachetul I/O Curs 11
Continutul cursului • Introducere • Platforma Java, Clase si Obiecte • Modificatori, Constructori • Pachete. Incapsularea datelor • Mostenirea / Extinderea claselor • Conversii de date. Clase si metode abstracte • Interfete • Exceptii (I) • Exceptii (II) • Fire de executie • Pachetul I/O Curs 11
Curs 11 • Pachetul I/O 1.1 Privire de ansamblu 1.2 Fluxuri de tip byte 1.3Fluxuri de tip caracter 1.4 Conversiiintrefluxuri de date 1.5 Accesareafisierelor 1.6 Clasa File 1.7 Eficientizareatransferului de date 1.8 Exemple 1.9 Link-uri utile Curs 11
C11. Pachetul I/O • 1.1 Privire de ansamblu • Aplicatiile au nevoie de modalitati de: • Citirea datelordintr-o sursaexterna (fisiere, retea, memoriesaualtaaplicatie) • Scriere a datelor la o destinatieexterne(fisiere, retea, memoriesaualtaaplicatie) • Citirea/scrierea de date se face prinintermediulunorcanale de comunicatiesaufluxurisirespectaurmatorulalgoritm: • deschide canal comunicatie • while (mai sunt informatii) { • citeste/scrie informatie; • } • inchide canal comunicatie;
C11. Pachetul I/O • 1.1 Privire de ansamblu • Fluxuri standard de intrare-iesire: • intrare standard • iesire standard • iesire standard pentru erori • Intrarea si iesirea standard sunt reprezentate de obiecte pre-create ce descriu fluxuri de date care comunica cu dispozitivele standard ale sistemului. • Aceste obiecte sunt definite publice in clasa System si sunt: • • System.in - fluxul standard de intrare • • System.out - fluxul standard de iesire • • System.err - fluxul standard pentru erori
C11. Pachetul I/O • 1.1 Privire de ansamblu • Pachetul I/O (java.io) contineclase care definescoperatiile de intrare-iesirecafluxuri(streams) de date, adicasecventestructurate de date care au o sursa (fluxuri de intrare) sau o destinatie(fluxuri de iesire). • Tipuri de fluxuri de date: • Fluxuri de tip byte • Pe 8 biti (data-based) • Fluxuri de intraresifluxuri de iesire • Fluxuri de tip caracter • Pe 16 biti (text-based) • Fluxuri de citiresifluxuri de scriere
C11. Pachetul I/O • 1.2 Fluxuride tip byte • Se folosescdouaclaseabstracte: InputStreamsiOutputStream • Citireadatelor: • ClasaInputStreamdefineste o metodaabstracta: • public abstract int read() throws IOException • Clasele care mostenescclasaInputStreamimplementeazametodaread(). • Exemplu: ClasaFileInputStreamcare citeste date (de tip byte) dintr-un fisier. • ClasaInputStreamcontinesi o serie de metodeneabstracte care permit citireaunui sir de date de tip byte saupentruignorareaunuinumar de bytes.
C11. Pachetul I/O • 1.2 Fluxuride tip byte • Scriereadatelor: • ClasaOutputStreamdefineste o metodaabstracta: • public abstract void write(int b) throws IOException • Clasele care mostenescclasaOutputStreamimplementeazametodawrite(). • Exemplu: ClasaFileOutputStreamcare scrie date (de tip byte) intr-un fisier. • ClasaOutputStreamcontinesi o serie de metodeneabstracte care permit scriereaunui sir de date de tip byte • Important! Dupascriereasaucitireadatelorfluxul de date trebuieinchisfolosindmetodaclose(), pentru a eliberarearesurselorceapartinsistemului de operare.
C11. Pachetul I/O • 1.2 Fluxuride tip byte import java.io.*; class CountBytes { • public static void main(String[] args) throws IOException { • FileInputStream in = new FileInputStream(args[0]); • int total = 0; • while (in.read() != -1) • total++; • in.close(); • System.out.println(total + ” bytes”); • } • } import java.io.*; class TranslateByte { • public static void main(String[] args) throws IOException { • byte from = (byte)args[0].charAt(0); • byte to = (byte)args[1].charAt(0); • int x; • while((x = System.in.read()) != -1) • System.out.write(x == from ? to : x); • } • }
C11. Pachetul I/O • 1.3 Fluxuride tip caracter • Se folosescdouaclaseabstracte: Reader siWriter • Fiecareclasa are metodesimilare cu celepentrufluxuri de tip byte (InputStreamsiOutputStream) • Clasele standard pentruoperatii de intrare-iesire- System.in, System.outsiSystem.err – au fostimplementateinainte de inventareafluxuri de tip caracter. Acesteautilizeazafluxuri de tip byte, desi, din punct de vedere logic, artrebuisa fie de tip caracter.
C11. Pachetul I/O • 1.4 Conversiiintrefluxuri • Conversiaintre date din fluxuri de tip byte sifluxuri de tip caracter se face cu ajutorulclaselorInputStreamReadersiOutputStreamWriter • public InputStreamReader(InputStream in) • public InputStreamReader(InputStream in, String encoding) • public OutputStreamWriter(OutputStream out) • public OutputStreamWriter(OutputStream out, String encoding) • Metodaread() a claseiInputStreamReaderciteste date in format byte din fluxulasociat (InputStream) si le converteste in caractere • Metodawrite() a claseiOutputStreamWriterconvertestedatele e tip caracter in format byte si le transmitefluxului de iesire (OutputStream)
C11. Pachetul I/O • 1.5 Accesareafisierelor • Accessecvential • Se pot folosiclaseleFileInputStream, FileOutputStream, FileReadersiFileWriter, pentruoperatii de intrare-iesire • Fiecareclasa are 3 tipuri de constructori: • Un constructor care primeste o valoare de tip String care reprezintanumeleunuifisier • Un constructor care primeste un obiect de tip Filecedescrie un fisier • Un constructor care primeste un obiect de tip FileDescriptor
C11. Pachetul I/O • 1.5 Accesareafisierelor • Accesaleator • ClasaRandomAccessFilepermite ca operatiile de citiresiscrieresa se faca la o locatiespecificata in cadrulunuifisier • Un indicator de fisierestefolositpentru a indicapozitia de unde se incepecitireasauscriere • ClasaRandomAccessFile nu este o subclasa a claselorInputStream, OutputStream, ReadersauWriterpentru ca permiteatatoperatii de scriere cat si de citire in cadrulaceluiasiobiect • ClasaRandomAccessFilepoatelucraatat cu fluxuri de tip byte cat si cu caractere.
C11. Pachetul I/O • 1.5 Accesareafisierelor import java.io.*; class Filecopy { public static void main(String args[]) { RandomAccessFile fh1 = null; RandomAccessFile fh2 = null; long filesize = -1; byte[] buffer1; try { fh1 = new RandomAccessFile(args[0], “r”); fh2 = new RandomAccessFile(args[1], “rw”); } catch (FileNotFoundException e) { System.out.println(“File not found”); System.exit(100); } try { filesize = fh1.length(); intbufsize = (int)filesize/2; buffer1 = new byte[bufsize]; fh1.readFully(buffer1, 0, bufsize); fh2.write(buffer1, 0, bufsize); } catch (IOException e) { System.out.println("IO error occurred!"); System.exit(200); } } }
C11. Pachetul I/O • 1.6 Clasa File • Aceastaclasa se folosestepentru a accesainformatiidespre un fisiersau un director • Un obiect de tip Filereprezintacaleacatre un fisiersi nu acceseazaefectivfisierul • Constructori: • public File( String name) • public File( String pathToName, String name) • public File( File directory, String name) • Metode: • booleancanRead() / booleancanWrite() • boolean exists() • booleanisFile() / booleanisDirectory() / booleanisAbsolute() • String getAbsolutePath() / String getPath() • String getParent() • String getName() • long length() • long lastModified()
C11. Pachetul I/O • 1.7 Eficientizareatransferului de date • ClasaBufferedReaderciteste date de la un flux de caracteresi le stocheazatemporarpentru a realiza o citiremaieficienta a caracterelorsi a sirurilor de caractere • De exemplu: • Se poatefolosi un obiect de tip InputStreamReader ca intrarepentruBufferedReader BufferedReader in • = new BufferedReader(new InputStreamReader(System.in)); • Se poatefolosi un obiect de tip FileReaderca intrarepentruBufferedReader BufferedReader in • = new BufferedReader(new FileReader(“fileName”)); • In final se poateapelapentruobiectele de tip BufferedReadermetodareadLine() care citestefluxul de caracterelinie cu linie
C11. Pachetul I/O • 1.7 Eficientizareatransferului de date import java.io.*; public class EfficientReader { public static void main (String[] args) { try { BufferedReaderbr = new BufferedReader(new FileReader(args[0])); // get line String line = br.readLine(); // while not end of file… keep reading and displaying lines while (line != null) { System.out.println("Read a line:"); System.out.println(line); line = br.readLine(); } // close stream br.close(); } catch(FileNotFoundExceptionfe) { System.out.println("File not found: “+ args[0]"); } catch(IOExceptionioe) { System.out.println("Can’t read from file: “+args[0]); } } }
C11. Pachetul I/O • 1.8 Exemple (I) • import java.io.*; • public class CopiereFisiere • { • static FileInputStreamfsursa; • static FileOutputStreamfdest; • public static void main( String args[]) • { if (args.length != 2) • { System.out.println("Utilizare: java CopiereFisieresursadestinatie"); • System.exit(1); • } • try • { fsursa = new FileInputStream(args[0]); • fdest = new FileOutputStream(args[1]); • copiere(fsursa,fdest); • fsursa.close(); • fdest.close(); • }
C11. Pachetul I/O • 1.8 Exemple (I) • catch (FileNotFoundException e) • { System.out.println("Nu existafisierul " + args[0]); • System.exit(2); • } • catch (IOException e) • { System.out.println(" Eroarecopiere"); • } • } • public static void copiere(InputStream sin, OutputStreamsout) • throws IOException • { byte buffer[] = new byte[1024]; • intbytesCititi; • while( (bytesCititi = sin.read(buffer)) > 0) • sout.write(buffer,0,bytesCititi); • } • }
C11. Pachetul I/O • 1.8 Exemple (II) • import java.io.*; • class ScriePrime • { public static void main(String args[]) • { int prime[] = new int[400]; • int index = 0, nr = 2; • while ( index < 400) • { if (estePrim(nr)) • prime[index++] = nr; • nr++; • } • try • { FileOutputStreamfout = new FileOutputStream("NrPrime.dat"); • BufferedOutputStream buffer = new BufferedOutputStream(fout); • DataOutputStream date = new DataOutputStream(buffer); • for(inti=0;i<400;i++) • date.writeInt(prime[i]); • date.close(); • }
C11. Pachetul I/O • 1.8 Exemple (II) • catch(IOExceptione) • { System.out.println("Eroare " + e); • System.exit(1); • } • System.exit(0); • } • public static booleanestePrim(int nr) • { double radical = Math.sqrt(nr); • for(inti=2;i<= radical;i++) • if (nr%i == 0) • return false; • return true; • } • }
C11. Pachetul I/O • 1.9 Link-uri utile: • Reading and Writing • http://java.sun.com/docs/books/tutorial/essential/io/index.html • File Access and Permissions • http://developer.java.sun.com/developer/onlineTraining/Programming/BasicJava1/data.html
Continutul cursului • Introducere • Platforma Java, Clase si Obiecte • Modificatori, Constructori • Pachete. Incapsularea datelor • Mostenirea / Extinderea claselor • Conversii de date. Clase abstracte • Interfete • Exceptii (I) • Exceptii (II) • Fire de executie • Pachetul I/O • Pachetul AWT Curs 11