РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
862 of 1163 menu

Класс BufferedWriter

Класс BufferedWriter из пакета java.io предназначен для буферизованной записи символов в выходной поток. Вместо того чтобы каждый раз обращаться к диску или сети при записи одного символа, класс накапливает данные во внутреннем буфере и сбрасывает их в целевой поток большими порциями. Это значительно повышает производительность операций ввода-вывода.

В первый параметр конструктора мы передаем объект Writer, в который будет производиться запись. Вторым необязательным параметром можно передать размер буфера в символах. По умолчанию размер буфера составляет 8192 символа.

Класс наследуется от абстрактного класса Writer и реализует все его методы, добавляя к ним метод newLine для записи разделителя строк, а также собственную реализацию flush для принудительного сброса буфера в целевой поток.

Синтаксис

BufferedWriter bw = new BufferedWriter(Writer out); BufferedWriter bw = new BufferedWriter(Writer out, int size);

Пример

Давайте запишем несколько строк в файл с помощью BufferedWriter:

import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class Main { public static void main(String[] args) { try (BufferedWriter bw = new BufferedWriter( new FileWriter("test.txt"))) { bw.write("abcde"); bw.newLine(); bw.write("12345"); } catch (IOException e) { System.out.println("Error: " + e.getMessage()); } } }

После выполнения кода файл test.txt будет содержать две строки:

"abcde" "12345"

Пример

Давайте запишем данные в буфер и принудительно сбросим их в целевой поток с помощью метода flush:

import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class Main { public static void main(String[] args) { try (BufferedWriter bw = new BufferedWriter( new FileWriter("test.txt"))) { bw.write("abcde"); bw.flush(); bw.write("12345"); } catch (IOException e) { System.out.println("Error: " + e.getMessage()); } } }

Метод flush немедленно записывает содержимое буфера в файл, не дожидаясь его заполнения. После выполнения кода файл test.txt будет содержать:

"abcde12345"

Пример

Давайте запишем символы по одному и проверим, что данные попадают в файл только после закрытия потока:

import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class Main { public static void main(String[] args) { try (BufferedWriter bw = new BufferedWriter( new FileWriter("test.txt"))) { String str = "abcde"; for (int i = 0; i < str.length(); i++) { bw.write(str.charAt(i)); } } catch (IOException e) { System.out.println("Error: " + e.getMessage()); } } }

Благодаря буферизации пять вызовов метода write не приводят к пяти обращениям к диску. Данные записываются одной операцией при закрытии потока в блоке try-with-resources. В результате файл test.txt содержит:

"abcde"

Смотрите также

  • класс Writer,
    базовый класс для всех символьных потоков записи
  • класс FileWriter,
    который записывает символы в файл
  • класс BufferedReader,
    который выполняет буферизованное чтение символов
  • метод flush,
    который сбрасывает буфер в целевой поток
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить