Buferele pentru fluxurile de caractere: BufferedReader și BufferedWriter
Scrierea textului cu BufferedWriter
Clasa BufferedWriter scrie textul într-un flux, bufând caracterele înainte de a le scrie efectiv pe suportul fizic. Aceasta reduce numărul de accesări directe ale suportului pentru scrierea datelor.
Clasa BufferedWriter are următorii constructori:
BufferedWriter(Writer out)
BufferedWriter(Writer out, int sz)
Primul parametru este un flux de ieșire în care se face scrierea, iar al doilea parametru specifică dimensiunea bufferului.
Exemplu de scriere într-un fișier:
import java.io.*;
public class Program {
public static void main(String[] args) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter("notes4.txt"))) {
String text = "Hello World!\nHey! Teachers! Leave the kids alone.";
bw.write(text);
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
Citirea textului cu BufferedReader
Clasa BufferedReader citește text dintr-un flux de caractere de intrare, bufând caracterele citite. Utilizarea bufferului este destinată creșterii performanței în citirea datelor din flux.
Clasa BufferedReader are următorii constructori:
BufferedReader(Reader in)
BufferedReader(Reader in, int sz)
Al doilea constructor permite specificarea dimensiunii bufferului. Pe lângă metodele moștenite din clasa Reader, BufferedReader are o metodă proprie, readLine(), care permite citirea pe rânduri.
Exemplu de utilizare a BufferedReader:
import java.io.*;
public class Program {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("notes4.txt"))) {
// citire caracter cu caracter
int c;
while ((c = br.read()) != -1) {
System.out.print((char) c);
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
De asemenea, putem citi textul rând cu rând:
try (BufferedReader br = new BufferedReader(new FileReader("notes4.txt"))) {
// citire rând cu rând
String s;
while ((s = br.readLine()) != null) {
System.out.println(s);
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
Citirea de la consolă și scrierea în fișier
Putem combina clasele BufferedReader și BufferedWriter pentru a citi date din consolă și a le scrie într-un fișier. Codul următor ilustrează această funcționalitate:
import java.io.*;
public class Program {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new FileWriter("notes5.txt"))) {
// citire rând cu rând
String text;
while (!(text = br.readLine()).equals("ESC")) {
bw.write(text + "\n");
bw.flush();
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
În acest exemplu, BufferedReader este folosit pentru a citi de la consolă cu ajutorul obiectului InputStreamReader(System.in). Într-un ciclu while, textul introdus de utilizator este citit rând cu rând. Până când utilizatorul introduce șirul "ESC", BufferedWriter va scrie textul în fișier.