Sunteți pe pagina 1din 26

1

Prezentare 12:
Input/Output
Fisiere text

PROGRAMARE ORIENTATA
OBIECT
2020
Streams

❑ Citirea/scrierea datelor in Java – inclusiv scrierea sau citirea


unui fisier – utilizeaza streams
❑ Stream - un obiect care reprezinta un flux de date
❑ instanta a unor clase definite in pachetul java.io

❑ output stream: trimite datele din program catre o

destinatie (fisier, ecran) – ex. System.out


❑ input stream – trimite datele de la o sursa (fisier,

tastatura) unui program – ex. System.in

07.12.2020 POO 2
Streams
ierarhia ‘byte’
InputStream
(clasa abstracta)
Reader ierarhia ‘character’
InputstreamReader

(clasa abstracta)

StringBufferInputStream ByteArrayInputStream FileInputStream FilterInputstream PipedInputStream


SequenceInputStream
StringReader CharArrayReader FileReader FilterReader PipedReader

BufferedInputStream PushBackInputStream LineNumberInput


DataInputStream
BufferedReader PushBackReader Stream

07.12.2020 POO 3
Streams DataInputStream

ierarhia ‘byte’
OutputStream
(clasa abstracta) DataInput
Writer ierarhia ‘character’
OutputStreamWriter

(clasa abstracta)

ByteArrayOutputStream FileOutputStream FilterOutputstream PipedOutputStream


StringWriter RandomAccesFile
CharArrayWriter FileWriter FilterWriter PipedWriter

BufferedOutputStream PrintStream
DataOutputStream DataOutput
BufferedWriter PrintWriter

ObjectOutput ObjectOutputStream

07.12.2020 POO 4
Tipuri de fisiere in Java

❑ Fisier text – colectie de caractere


❑ stream-uri associate cu un fisier text pun la dispozitie
metode care interpreteaza continutul binar al fisierului
drept caractere
❑ recomandat daca este utilizat un editor pentru

scrierea/citirea fisierului
❑ Fisier binar
❑ recomandat in toate celelate cazuri

❑ ocupa mai putin spatiu pe disc decat un fisier text

Numele fisierului - impus de sistemul de operare;


sir de caractere - intr-un program Java
07.12.2020 POO 5
Fisiere text

❑ Continut fisier text


❑ o secventa de caractere in care fiecare caracter este
reprezentat prin codificarea Unicode (2 octeti) (Java)
❑ organizat pe linii, fiecare linie se termina cu un caracter
special (end-of-line)
❑ access secvential - inainte de a citi a n-a linie, trebuie
citite primele n-1 linii din fisier

07.12.2020 POO 6
Fisiere text

❑ Deschidere pentru scriere


PrintWriter inFis = new PrintWriter(numeFis);

❑ new PrintWriter(numeFis) creeaza un stream de iesire pe care il


conecteaza la fisierul desemnat prin variabila numeFis (de tip
String)
❑ poate fi aruncata exceptia – FileNotFoundException – daca
fisierul nu poate fi deschis pentru scriere: nu exista sau nu
poate fi creat
❑ fisierul este vid initial
o daca nu exista, este creat

o daca exista, continutul se pierde

07.12.2020 POO 7
Fisiere text

❑ Deschidere pentru scriere

String numeFis = "data.txt";


PrintWriter fluxFis = null;

try {
fluxFis = new PrintWriter(numeFis);
}
catch(FileNotFoundException e) {
System.out.println("Eroare deschidere fisier" + numeFis);
System.out.println(e.getMessage());
}

07.12.2020 POO 8
Fisiere text

❑ Scriere in fisier text

for(int cont = 1; cont <= 4; cont++)


fluxFis.println("linie " + cont);

Se utilizeaza variabila fluxFis


pentru scriere

07.12.2020 POO 9
Fisiere text

❑ Inchidere fisier

fluxFis.close();

Daca un fisier nu este inchis, Java il inchide dar numai daca


programul se termina normal; altfel continutul poate fi
pierdut

07.12.2020 POO 10
Fisiere text

❑ Fortare scriere
❑ scrierea in fisier se face utilizand un buffer

❑ se poate forta scrierea continutului buffer-ului in fisier prin:

fluxFis.flush();

❑ metoda close() apeleaza flush()

07.12.2020 POO 11
Fisiere text

❑ Adaugare in fisier

public FileWriter(String numeFis, boolean adg)

❑ deschide pentru scriere fisierul desemnat de variabila


numeFis
o se adauga la sfarsit, daca variabila agd este true

o se pierde informatia, daca variabila agd este false

07.12.2020 POO 12
Fisiere text
❑ Adaugare in fisier

PrintWriter fluxFis = null;


String numeFis = "data.txt";

try {
FileWriter fw = new FileWriter(numeFis, true); //IOException ?
fluxFis = new PrintWriter(fw); //FileNotfoundException ?
}
/** sau fluxFis = new PrintWriter(new FileWriter(numeFis, true));
catch(FileNotFoundException e) {
System.out.println("Eroare deschidere fisier" + numeFis);
System.out.println(e.getMessage());
System.exit(0);
}

07.12.2020 POO 13
Fisiere text
❑ Adaugare in fisier

catch(IOException e) {
System.out.println("Eroare deschidere fisier" + numeFis);
System.out.println(e.getMessage());
System.exit(0);
}

fluxFis.println("...");
fluxFis.close();

De ce nu este suficienta clasa FileWriter? Ofera doar metode de


baza. PrintWriter are mai multe metode utile – ex. println

07.12.2020 POO 14
Fisiere text
❑ Deschidere pentru citire

Scanner dinFis = new Scanner(new File(numeFis));

❑ Scanner (java.io) nu este o clasa Stream


❑ un obiect Scanner poate prelucra un sir:
o introdus de la tastatura

o citit dintr-un fisier text

o primit ca argument in constructor

❑ File (java.io) reprezinta un fisier intr-un mod abstract, independent


de sistem

07.12.2020 POO 15
Fisiere text

❑ Deschidere pentru citire

String numeFis = "data.txt";


Scanner fisData = null;
try {
fisData = new Scanner(new File(numeFis));
}
catch(FileNotFoundException e) {
System.out.println("Eroare deschidere fisier" + numeFis);
System.out.println(e.getMessage());
}

07.12.2020 POO 16
Fisiere text

❑ Citire din fisier

while (fisData.hasNextLine()) {
String linie = fisData.nextLine();
System.out.println(linie);
}

07.12.2020 POO 17
Fisiere text

❑ Operatii cu fisiere text

public static boolean creeazaFisText(String numeFis, int nrLin) {


boolean fisDeschis = true;
PrintWriter fluxFis = null;
try {
fluxFis = new PrintWriter(numeFis);
}
catch(FileNotFoundException e) {
fisDeschis = false;
}

07.12.2020 POO 18
Fisiere text
❑ Operatii cu fisiere text
if (fisDeschis) {
Scanner keyboard = new Scanner(System.in);
System.out.println("Intro " + nrLin + "linii de date:");
for (int cont = 1; cont< = nrLin; cont++) {
System.out.print("Linie " + cont + ": ");
String linie = keyboard.nextLine();
fluxFis.println(linie);
}
fluxFis.close();
}

return fisDeschis;
}
07.12.2020 POO 19
Fisiere text
❑ Operatii cu fisiere text
public static boolean afisFis(String numeFis) {
boolean fisDeschis = true;
try {
Scanner fisData = new Scanner(new File(numeFis));
System.out.println("Fis " + numeFis + "contine liniile:");
while (fisData.hasNextLine()) {
String linie = fisData.nextLine();
System.out.println(linie);
}
fisData.close();
}
catch(FileNotFoundException e) {
fisDeschis = false;
}
return fisDeschis;
}
07.12.2020 POO 20
Fisiere text
❑ Clasa File
❑ utilizata pentru a:

▪ testa daca un fisier exista – metoda exists


▪ testa daca un fisier exista si poate fi citit – metoda
canRead
▪ testa daca un fisier exista si poate fi scris – metoda
canWrite
▪ schimba numele unui fisier – metoda renameTo
▪ sterge un fisier – metoda delete

07.12.2020 POO 21
Fisiere text
❑ Modificarea datelor
❑ citire dintr-un fisier, scriere in alt fisier

❑ stergere fisier initial

❑ eventual redenumire fisier nou

File fisOrig = new File("Data.txt");


File fisNou = new File("DataAct.txt");
if (fisOrig.renameTo(fisNou)) {
System.out.println("Nume schimbat");
fisOrig.delete();
}
else
System.out.println("Incercare esuata");

07.12.2020 POO 22
Fisiere standard input/output

❑ Standard input: System.in - InputStream


❑ Standard output: System.out - PrintStream
❑ Standard error: System.err - PrintStream

07.12.2020 POO 23
Fisiere standard input/output

❑ Citirea din standard input (InputStream)

public class Ecou {


public static void main(String[] args) throws IOException {
BufferedReader stdin = new BufferedReader(new
InputStreamReader(System.in));
String s;
while ((s = stdin.readLine()) ! null && s.length() != 0)
System.out.println(s);
}
}

07.12.2020 POO 24
Fisiere text
❑ Redirectarea standard I/O

public class Redirect {


public static void main(String[] args) throws IOException {
PrintStream cons = System.out; //salveaza std. out
BufferedInputStream in = new
BufferedInputStream(new FileInputStream(“Redirect.java”));
PrintStream out = new PrintStream(new
BufferedOutputStream(new FileOutputStream(“test.out”)));
System.setIn(in); //redirecteaza std. in
System.setOut(out); //redirecteaza std. out
System.setErr(out); //redirecteaza std. err
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
}
07.12.2020 POO 25
Fisiere text
❑ Redirectarea standard I/O
public class Redirect {

String s;
while ((s = br.readLine()) != null)
System.out.println(s);
out.close();
System.setOut(cons);

}
}

07.12.2020 POO 26

S-ar putea să vă placă și