Programare Orientata Obiect

23
06/13/22 Curs 11 1 Programare Orientata Obiect Curs 11 Pachetul I/O

description

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) - PowerPoint PPT Presentation

Transcript of Programare Orientata Obiect

Page 1: Programare Orientata Obiect

04/21/23 Curs 11 1

Programare Orientata Obiect

Curs 11

Pachetul I/O

Page 2: Programare Orientata Obiect

04/21/23 Curs 11 2

Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor5. Mostenirea / Extinderea claselor6. Conversii de date. Clase si metode abstracte7. Interfete8. Exceptii (I)9. Exceptii (II)10. Fire de executie11. Pachetul I/O

Page 3: Programare Orientata Obiect

04/21/23 Curs 11 3

Curs 11

1. Pachetul I/O1.1 Privire de ansamblu1.2 Fluxuri de tip byte1.3 Fluxuri de tip caracter1.4 Conversii intre fluxuri de date1.5 Accesarea fisierelor1.6 Clasa File1.7 Eficientizarea transferului de date 1.8 Exemple1.9 Link-uri utile

Page 4: Programare Orientata Obiect

C11. Pachetul I/O1.1 Privire de ansamblu

– Aplicatiile au nevoie de modalitati de:– Citire a datelor dintr-o sursa externa (fisiere, retea,

memorie sau alta aplicatie)– Scriere a datelor la o destinatie externe (fisiere, retea,

memorie sau alta aplicatie)– Citirea/scrierea de date se face prin intermediul unor

canale de comunicatie sau fluxuri si respecta urmatorul algoritm:

deschide canal comunicatiewhile (mai sunt informatii) {

citeste/scrie informatie;}inchide canal comunicatie;

Page 5: Programare Orientata Obiect

C11. Pachetul I/O1.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

Page 6: Programare Orientata Obiect

C11. Pachetul I/O1.1 Privire de ansamblu

– Pachetul I/O (java.io) contine clase care definesc operatiile de intrare-iesire cafluxuri (streams) de date, adica secvente structurate 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 intrare si fluxuri de iesire

– Fluxuri de tip caracter– Pe 16 biti (text-based)– Fluxuri de citire si fluxuri de scriere

Page 7: Programare Orientata Obiect

C11. Pachetul I/O1.2 Fluxuri de tip byte

– Se folosesc doua clase abstracte: InputStream si OutputStream

– Citirea datelor:– Clasa InputStream defineste o metoda abstracta:

public abstract int read() throws IOException

– Clasele care mostenesc clasa InputStream implementeaza metoda read().

– Exemplu: Clasa FileInputStream care citeste date (de tip byte) dintr-un fisier.

– Clasa InputStream contine si o serie de metode neabstracte care permit citirea unui sir de date de tip byte sau pentru ignorarea unui numar de bytes.

Page 8: Programare Orientata Obiect

C11. Pachetul I/O1.2 Fluxuri de tip byte

– Scrierea datelor:– Clasa OutputStream defineste o metoda abstracta:

public abstract void write(int b) throws IOException

– Clasele care mostenesc clasa OutputStream implementeaza metoda write().

– Exemplu: Clasa FileOutputStream care scrie date (de tip byte) intr-un fisier.

– Clasa OutputStream contine si o serie de metode neabstracte care permit scrierea unui sir de date de tip byte

– Important! Dupa scrierea sau citirea datelor fluxul de date trebuie inchis folosind metoda close(), pentru a eliberarea resurselor ce apartin sistemului de operare.

Page 9: Programare Orientata Obiect

C11. Pachetul I/O1.2 Fluxuri de 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);

}}

Page 10: Programare Orientata Obiect

C11. Pachetul I/O1.3 Fluxuri de tip caracter

– Se folosesc doua clase abstracte: Reader si Writer

– Fiecare clasa are metode similare cu cele pentru fluxuri de tip byte (InputStream si OutputStream)

– Clasele standard pentru operatii de intrare-iesire - System.in, System.out si System.err – au fost implementate inainte de inventarea fluxuri de tip caracter. Acestea utilizeaza fluxuri de tip byte, desi, din punct de vedere logic, ar trebui sa fie de tip caracter.

Page 11: Programare Orientata Obiect

C11. Pachetul I/O1.4 Conversii intre fluxuri

– Conversia intre date din fluxuri de tip byte si fluxuri de tip caracter se face cu ajutorul claselor InputStreamReader si OutputStreamWriter public InputStreamReader(InputStream in)public InputStreamReader(InputStream in, String encoding)public OutputStreamWriter(OutputStream out)public OutputStreamWriter(OutputStream out, String encoding)

– Metoda read() a clasei InputStreamReader citeste date in format byte din fluxul asociat (InputStream) si le converteste in caractere

– Metoda write() a clasei OutputStreamWriter converteste datele e tip caracter in format byte si le transmite fluxului de iesire (OutputStream)

Page 12: Programare Orientata Obiect

C11. Pachetul I/O1.5 Accesarea fisierelor

– Acces secvential– Se pot folosi clasele FileInputStream,

FileOutputStream, FileReader si FileWriter, pentru operatii de intrare-iesire

– Fiecare clasa are 3 tipuri de constructori:– Un constructor care primeste o valoare de tip

String care reprezinta numele unui fisier– Un constructor care primeste un obiect de tip

File ce descrie un fisier– Un constructor care primeste un obiect de tip

FileDescriptor

Page 13: Programare Orientata Obiect

C11. Pachetul I/O1.5 Accesarea fisierelor

– Acces aleator– Clasa RandomAccessFile permite ca operatiile de

citire si scriere sa se faca la o locatie specificata in cadrul unui fisier

– Un indicator de fisier este folosit pentru a indica pozitia de unde se incepe citirea sau scriere

– Clasa RandomAccessFile nu este o subclasa a claselor InputStream, OutputStream, Reader sau Writer pentru ca permite atat operatii de scriere cat si de citire in cadrul aceluiasi obiect

– Clasa RandomAccessFile poate lucra atat cu fluxuri de tip byte cat si cu caractere.

Page 14: Programare Orientata Obiect

C11. Pachetul I/O1.5 Accesarea fisierelor

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(); int bufsize = (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); } }}

Page 15: Programare Orientata Obiect

C11. Pachetul I/O1.6 Clasa File

– Aceasta clasa se foloseste pentru a accesa informatii despre un fisier sau un director

– Un obiect de tip File reprezinta calea catre un fisier si nu acceseaza efectiv fisierul

– Constructori:public File( String name)

public File( String pathToName, String name) public File( File directory, String name)

– Metode:boolean canRead() / boolean canWrite()

boolean exists()boolean isFile() / boolean isDirectory() / boolean isAbsolute()String getAbsolutePath() / String getPath()String getParent()String getName()long length()long lastModified()

Page 16: Programare Orientata Obiect

C11. Pachetul I/O1.7 Eficientizarea transferului de date

– Clasa BufferedReader citeste date de la un flux de caractere si le stocheaza temporar pentru a realiza o citire mai eficienta a caracterelor si a sirurilor de caractere

– De exemplu:– Se poate folosi un obiect de tip InputStreamReader ca intrare

pentru BufferedReader

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

– Se poate folosi un obiect de tip FileReader ca intrare pentru BufferedReader

BufferedReader in = new BufferedReader(new FileReader(“fileName”));

– In final se poate apela pentru obiectele de tip BufferedReader metoda readLine() care citeste fluxul de caractere linie cu linie

Page 17: Programare Orientata Obiect

C11. Pachetul I/O1.7 Eficientizarea transferului de date

import java.io.*;public class EfficientReader { public static void main (String[] args) {

try { BufferedReader br = 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(FileNotFoundException fe) { System.out.println("File not found: “+ args[0]"); } catch(IOException ioe) { System.out.println("Can’t read from file: “+args[0]); } }}

Page 18: Programare Orientata Obiect

C11. Pachetul I/O1.8 Exemple (I)import java.io.*;public class CopiereFisiere{ static FileInputStream fsursa; static FileOutputStream fdest; public static void main( String args[]) { if (args.length != 2) { System.out.println("Utilizare: java CopiereFisiere sursa destinatie"); System.exit(1); } try { fsursa = new FileInputStream(args[0]); fdest = new FileOutputStream(args[1]); copiere(fsursa,fdest); fsursa.close(); fdest.close(); }

Page 19: Programare Orientata Obiect

C11. Pachetul I/O1.8 Exemple (I)

catch (FileNotFoundException e) { System.out.println("Nu exista fisierul " + args[0]); System.exit(2); } catch (IOException e) { System.out.println(" Eroare copiere"); } }

public static void copiere(InputStream sin, OutputStream sout) throws IOException { byte buffer[] = new byte[1024]; int bytesCititi; while( (bytesCititi = sin.read(buffer)) > 0) sout.write(buffer,0,bytesCititi); }}

Page 20: Programare Orientata Obiect

C11. Pachetul I/O1.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 { FileOutputStream fout = new FileOutputStream("NrPrime.dat"); BufferedOutputStream buffer = new BufferedOutputStream(fout); DataOutputStream date = new DataOutputStream(buffer); for(int i=0;i<400;i++) date.writeInt(prime[i]); date.close(); }

Page 21: Programare Orientata Obiect

C11. Pachetul I/O1.8 Exemple (II)

catch(IOException e) { System.out.println("Eroare " + e); System.exit(1); } System.exit(0); } public static boolean estePrim(int nr) { double radical = Math.sqrt(nr); for(int i=2;i<= radical;i++) if (nr%i == 0) return false; return true; } }

Page 22: Programare Orientata Obiect

C11. Pachetul I/O1.9 Link-uri utile:• Reading and Writinghttp://java.sun.com/docs/books/tutorial/essential/io/index.html

• File Access and Permissionshttp://developer.java.sun.com/developer/onlineTraining/Programming/BasicJava1/data.html

Page 23: Programare Orientata Obiect

04/21/23 Curs 11 23

Continutul cursului1. Introducere2. Platforma Java, Clase si Obiecte3. Modificatori, Constructori4. Pachete. Incapsularea datelor5. Mostenirea / Extinderea claselor6. Conversii de date. Clase abstracte7. Interfete8. Exceptii (I)9. Exceptii (II)10. Fire de executie11. Pachetul I/O12. Pachetul AWT