JavaRush /Java блог /Random /BufferedReader и BufferedWriter
Автор
John Selawsky
Senior Java-разработчик и преподаватель в LearningTree

BufferedReader и BufferedWriter

Статья из группы Random
Java класс BufferedReader читает текст из потока ввода символов, буферизуя прочитанные символы, чтобы обеспечить эффективное считывание символов, массивов и строк. Можно указать в конструкторе вторым параметром размер буфера.
BufferedReader и BufferedWriter - 1
Конструкторы:

BufferedReader(Reader in) // Создает буферный поток ввода символов, который использует размер буфера по умолчанию.
BufferedReader(Reader in, int sz) // Создает буферный поток ввода символов, который использует указанный размер.
Методы:

close() // закрыть поток
mark(int readAheadLimit) // отметить позицию в потоке
markSupported() // поддерживает ли отметку потока
int read() // прочитать буфер
int read(char[] cbuf, int off, int len) // прочитать буфер
String readLine() // следующая строка
boolean ready() // может ли поток читать
reset() // сбросить поток
skip(long n) // пропустить символы
Пример использования классов BufferedReader и BufferedWriter: Чтения файла:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class FileReaderExample {

	public static void main(String[] args) {
		String inputFileName = "file.txt";

		try (BufferedReader reader = new BufferedReader(new FileReader(inputFileName))) {
			String line;
			while ((line = reader.readLine()) != null) {
				System.out.println(line + "\n");
			}
		} 
                catch (IOException e) {
			e.printStackTrace();
		}
	}

}
Java класс BufferedWriter записывает текст в поток вывода символов, буферизуя записанные символы, чтобы обеспечить эффективную запись символов, массивов и строк. Можно указать в конструкторе вторым параметром размер буфера. Конструкторы:

BufferedWriter(Writer out) // Создает буферный поток вывода символов, который использует размер буфера по умолчанию.
BufferedWriter(Writer out, int sz) // Создает буферный поток вывода символов, который использует указанный размер.
Методы:

close() // закрыть поток
flush() // передать данные из буфера во Writer
newLine() // перенос на новую строку
write(char[] cbuf, int off, int len) // запись в буфер
write(int c) // запись в буфер
write(String s, int off, int len) // запись в буфер
Пример использования классов Java BufferedReader и BufferedWriter: Запись в файл

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileWritterExample {

	public static void main(String[] args) {
		String outputFileName = "file.txt";
		String[] array = { "one", "two", "three", "four" };

		try (BufferedWriter writter = new BufferedWriter(new FileWriter(outputFileName))) {
			for (String value : array) {
				writter.write(value + "\n");
			}
		} 
        catch (IOException e) {
			e.printStackTrace();
		}
	}

}
FileWriter сразу записывает данные на диск и каждый раз к нему обращается, буфер работает как обертка и ускоряет работу приложения. Буфер будет записывать данные в себя, а потом большим куском файлы на диск. Считываем данные с консоли и записываем в файл:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class ConsoleReaderExample {

	public static void main(String[] args) {
		String outputFileName = "file.txt";

		try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
			try (BufferedWriter writter = new BufferedWriter(new FileWriter(outputFileName))) {
				String line;
				while (!(line = reader.readLine()).equals("exit")) { // Прерывание цикла при написании строки exit
					writter.write(line);
				}
			}
		} 
         catch (IOException e) {
			e.printStackTrace();
		}
	}

}
Комментарии (136)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Dinislam Aminev Уровень 16 Expert
24 января 2023
Люди на 9 уровне пишут, что ничего непонятно. А я тут со своим 3м выпендриваюсь, что не понимаю
Kirill Уровень 22
18 ноября 2022
Кто подскажет. Возможно я не правильно мыслю, но в задачи необходимо определить минимальную из 2х вводных. Я вот не могу понять, каким образом сразу загрузить входные данные, сразу два числа. Пока считывает с консоли только одно
Anonymous #2835492 Уровень 24
30 сентября 2022
Класс!!! Большое спасибо!
рост Уровень 32
27 сентября 2022
спасибо)
SerVit Уровень 9
27 января 2022
Ничего не понял. Вернусь позже...
hidden #2436024 Уровень 14
28 марта 2021
try (BufferedWriter writter = new BufferedWriter(new FileWriter(outputFileName))) { Обьясните почему после слова try в круглых скобках выражение?Что значит?
🦔 Виктор Уровень 20 Expert
4 января 2021
Суховато, на статью не тянет, больше как справочный материал и примеры для решения задач 13 уровня. В любом случае, спасибо за труды. Оригинальная статья на Метаните: Буферизация символьных потоков. BufferedReader и BufferedWriter. Всё получится!
Regina C Уровень 36
7 декабря 2020
а с каких пор writer пишется с двумя t?)
Алексей Уровень 16
28 ноября 2020
Как здесь закрывается поток для записи?
Лайк, если всегда хотели написать комментарий типа того, что на три ниже, но вас уже везде опередили.