Documente Academic
Documente Profesional
Documente Cultură
Curs 5
Curs 5
Fluxuri
Ce sunt fluxurile ? Clasificare, ierarhie Fluxuri primitive Fluxuri de procesare Intr ri #i ie#iri formatate Fluxuri standard de intrare #i ie#ire Analiza lexical Clase independente (RandomAccessFile, File)
Seriale, pe 8 sau 16 bi&i Produc tor: proces care descrie o surs extern de date Consumator: proces care descrie o destina&ie extern pentru date Unidirec&ionale, de la produc tor la consumator Un singur proces produc tor Un singur proces consumator
Un flux care cite#te date se nume#te flux de intrare. Un flux care scrie date se nume#te flux de ie#ire.
deschide canal comunicatie while (mai sunt informatii) { citeste/scrie informatie; } inchide canal comunicatie;
Clasificarea fluxurilor
Dup direc&ia canalului de comunica&ie:
fluxuri de intrare (citire) fluxuri de ie#ire (scriere)
Writer
Octe&i: InputStream
OutputStream
Reader int read() int read(char buf[]) InputStream int read() int read(byte buf[])
l l
Fluxuri primitive
In func&ie de tipul sursei datelor: l Fi#ier FileReader, FileWriter, FileInputStream, FileOutputStream l Memorie CharArrayReader, CharArrayWriter, ByteArrayInputStream, ByteArrayOutputStream, StringReader, StringWriter l Pipe PipedReader, PipedWriter, PipedInputStream, PipedOutputStream
folosite pentru a canaliza ie#irea unui program sau fir de execu&ie c tre intrarea altui program sau fir de execu&ie.
responsabile cu preluarea datelor de la un flux primitiv #i procesarea acestora pentru a le oferi ntr-o alt form , mai util dintr-un anumit punct de vedere.
Bufferizare BufferedReader, BufferedWriter BufferedInputStream, BufferedOutputStream Conversie octe&i-caractere/caractere-octe&i InputStreamReader OutputStreamWriter Concatenare SequenceInputStream Serializare ObjectInputStream, ObjectOutputStream
//echivalent cu: FileReader fr = new FileReader("fisier.txt"); BufferedReader in = new BufferedReader(fr); crearea unui flux de iesire printr-un buffer BufferedWriter out = new BufferedWriter(new FileWriter("fisier.txt")));
l
BufferedReader, BufferedWriter BufferedInputStream, BufferedOutputStream Introduc un buffer (zon de memorie) n procesul de citire/scriere a informa&iilor.
BufferedOutputStream out = new BufferedOutputStream (new FileOutputStream("out.dat"), 1024); //1024 este dimensiunea bufferului
Scopul: eficien&a - Scade num rul de acces ri ale dispozitivului extern - Cre#te viteza de execu&ie
Metoda flush
- gole te explicit bufferul BufferedWriter out = new BufferedWriter(new FileWriter("out.dat"), 1024); //am creat un flux cu buffer de 1024 octeti for(int i=0; i<1000; i++) out.write(i); //bufferul nu este plin, in fisier nu s-a scris nimic out.flush(); //bufferul este golit, datele se scriu in fisier
Metoda readLine
BufferedReader br = new BufferedReader(new FileReader("in")); String linie; while ((linie = br.readLine()) != null) { ... //proceseaza linie } br.close();
DataInputStream #i DataOutputStream
l l
l l
un flux nu mai este v zut ca o nsiruire de octe&i, ci de date primitive. scrierea datelor se face n format binar, ceea ce nseamn c un fi#ier n care au fost scrise informa&ii folosind metode writeX nu va putea fi citit dect prin metode readX. transformarea unei valori n format binar - serializare. permit serializarea tipurilor primitive #i a #irurilor de caractere.
Scanner s=new Scanner(System.in); String nume = s.next(); int varsta = s.nextInt(); double salariu = s.nextDouble(); s.close();
Ie#iri formatate
PrintStream #i PrintWriter : print, println format, printf System.out.printf("%s %8.2f %2d %n", nume, salariu, varsta);
l
Clasa DataInputStream DataInputStream stdin = new DataInputStream( System.in); System.out.print("Introduceti o linie:"); String linie = stdin.readLine() System.out.println(linie);
l
Redirectarea fluxurilor standard: stabilirea unei alte surse dect tastatura pentru citirea datelor, respectiv alte destina&ii dect ecranul pentru cele dou fluxuri de ie#ire. setIn(InputStream) - redirectare intrare setOut(PrintStream) - redirectare ie#ire setErr(PrintStream) - redirectare erori
l l l
PrintStream fis = new PrintStream( new FileOutputStream("rezultate.txt"))); System.setOut(fis); PrintStream fis = new PrintStream(new FileOutputStream("erori.txt"))); System.setErr(fis);
Clasa RandomAccessFile
permite accesul nesecven&ial (direct) la con&inutul unui fi#ier; este o clas de sine st t toare, subclas direct a clasei Object; se g se#te n pachetul java.io; ofer metode de tipul readX, writeX; permite att citirea ct #i scriere din/n fi#iere cu acces direct; permite specificarea modului de acces al unui fi#ier (read-only, read-write). RandomAccessFile f1 = new RandomAccessFile("fisier.txt", "r");
//deschide un fisier pentru citire
Program pentru afi#area pe ecran a liniilor dintr-un fi#ier text, fiecare linie precedat de num rul liniei #i de un spa&iu.
import java.io.*; class A{ public static void main(String arg[]) throws IOException{ RandomAccessFile raf=new RandomAccessFile( arg[0],"r"); String s; int i=1; while( (s=raf.readLine())!=null) { System.out.println(i+" "+s); i++; } raf.close(); } }
l l l
Clasa File nu se refer# doar la un fi ier ci poate reprezenta fie un fi ier anume, fie mul&imea fi ierelor dintr-un director. Utilitatea clasei File const# n furnizarea unei modalit#&i de a abstractiza dependen&ele c#ilor i numelor fi ierelor fa&# de ma ina gazd# Ofer# metode pentru testarea existen&ei, tergerea, redenumirea unui fi ier sau director, crearea unui director, listarea fi ierelor dintr-un director, etc. Constructorii fluxurilor pentru fi iere accept# ca argument obiecte de tip File: File f = new File("fisier.txt"); FileInputStream in = new FileInputStream(f); String[ ] list() File[ ] listFiles() String getAbsolutePath()
import java.io.*; import java.util.*; class Dir{ public void dirlist (File d, String sp) throws IOException { String [] files=d.list(); //lista numelor din obiectul d if (files ==null ) return; String path =d.getAbsolutePath(); //calea completa spre obiectul d