Класс BufferedWriter записывает текст в поток, предварительно буферизируя записываемые символы, тем самым снижая количество обращений к физическому носителю для записи данных.
Класс BufferedWriter имеет следующие конструкторы:
BufferedWriter(Writer out) BufferedWriter(Writer out, int sz)
В качестве параметра он принимает поток вывода, в который надо осуществить запись. Второй параметр указывает на размер буфера.
Например, осуществим запись в файл:
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());
}
}
}
Класс BufferedReader считывает текст из символьного потока ввода, буферизируя прочитанные символы. Использование буфера призвано увеличить производительность чтения данных из потока.
Класс BufferedReader имеет следующие конструкторы:
BufferedReader(Reader in) BufferedReader(Reader in, int sz)
Второй конструктор, кроме потока ввода, из которого производится чтение, также определяет размер буфера, в который будут считываться символы.
Так как BufferedReader наследуется от класса Reader, то он может использовать все те методы для чтения из потока, которые определены в
Reader. И также BufferedReader определяет свой собственный метод readLine(), который позволяет считывать из потока построчно.
Рассмотрим применение BufferedReader:
import java.io.*;
public class Program {
public static void main(String[] args) {
try(BufferedReader br = new BufferedReader (new FileReader("notes4.txt")))
{
// чтение посимвольно
int c;
while((c=br.read())!=-1){
System.out.print((char)c);
}
}
catch(IOException ex){
System.out.println(ex.getMessage());
}
}
}
Также можно считать текст построчно:
try(BufferedReader br = new BufferedReader(new FileReader("notes4.txt")))
{
//чтение построчно
String s;
while((s=br.readLine())!=null){
System.out.println(s);
}
}
catch(IOException ex){
System.out.println(ex.getMessage());
}
Соединим оба класса BufferedReader и BufferedWriter для считывания с консоли в файл. Для этого определим следующий код программы:
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")))
{
// чтение построчно
String text;
while(!(text=br.readLine()).equals("ESC")){
bw.write(text + "\n");
bw.flush();
}
}
catch(IOException ex){
System.out.println(ex.getMessage());
}
}
}
Здесь объект BufferedReader устанавливается для чтения с консоли с помощью объекта new InputStreamReader(System.in).
В цикле while считывается введенный текст. И пока пользователь не введет строку "ESC", объект BufferedWriter будет записывать текст файл.