Пользователь Ivan Zaitsev
Ivan Zaitsev
33 уровень
Киев

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();
		}
	}

}
Комментарии (112)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Evgeny Vlasov 14 уровень
28 марта 2021
try (BufferedWriter writter = new BufferedWriter(new FileWriter(outputFileName))) { Обьясните почему после слова try в круглых скобках выражение?Что значит?
🦔 Виктор 20 уровень, Москва Expert
4 января 2021
Суховато, на статью не тянет, больше как справочный материал и примеры для решения задач 13 уровня. В любом случае, спасибо за труды. Оригинальная статья на Метаните: Буферизация символьных потоков. BufferedReader и BufferedWriter. Всё получится!
Regina Kazan 35 уровень, Казань
7 декабря 2020
а с каких пор writer пишется с двумя t?)
Алексей 15 уровень, Саранск
28 ноября 2020
Как здесь закрывается поток для записи?
5 октября 2020
Лайк, если всегда хотели написать комментарий типа того, что на три ниже, но вас уже везде опередили.
Regina Kazan 35 уровень, Казань
16 сентября 2020
Очень короткая статья, написанная сухим языком, в комментариях люди больше изложили чем здесь..
Максим 17 уровень, Санкт-Петербург
21 июля 2020
https://www.youtube.com/watch?v=TR8-chtKXFQ
Alexey 28 уровень, Москва
30 июня 2020
Палец вверх, если вы тоже пытаетесь найти здесь ответ, как использовать BufferedWriter и решить 19-ую задачу из Java Core 3-го уровня "Писатель в файл с консоли".
Николай Павленко 26 уровень, Запорожье
16 июня 2020
То что я искал. Спасибо!!!
Игорь 22 уровень, Москва
7 июня 2020
Пустая статья без выкладок и объяснений, тупо примеры.