Java Language
Читатели и писатели
Поиск…
Вступление
Читатели и писатели и их соответствующие подклассы обеспечивают простой ввод-вывод для текстовых / символьных данных.
BufferedReader
Вступление
Класс BufferedReader
является оберткой для других классов Reader
которая выполняет две основные цели:
BufferedReader
обеспечивает буферизацию для обернутогоReader
. Это позволяет приложению читать символы по одному без лишних накладных расходов ввода-вывода.BufferedReader
обеспечивает функциональность для чтения текста строки за раз.
Основы использования BufferedReader
Обычный шаблон для использования BufferedReader
выглядит следующим образом. Во-первых, вы получаете Reader
, с которого хотите читать символы. Затем вы создаете экземпляр BufferedReader
который обертывает Reader
. Затем вы читаете символьные данные. Наконец, вы закрываете BufferedReader
который закрывает завернутый «Reader». Например:
File someFile = new File(...);
int aCount = 0;
try (FileReader fr = new FileReader(someFile);
BufferedReader br = new BufferedReader(fr)) {
// Count the number of 'a' characters.
int ch;
while ((ch = br.read()) != -1) {
if (ch == 'a') {
aCount++;
}
}
System.out.println("There are " + aCount + " 'a' characters in " + someFile);
}
Вы можете применить этот шаблон к любому Reader
Заметки:
Мы использовали Java 7 (или более поздние) try-with-resources, чтобы гарантировать, что основной читатель всегда закрыт. Это позволяет избежать потенциальной утечки ресурсов. В более ранних версиях Java вы должны явно закрыть
BufferedReader
в блокеfinally
.Код внутри блока
try
практически идентичен тому, что мы будем использовать, если мы будем читать непосредственно изFileReader
. Фактически,BufferedReader
функционирует точно так же, как иReader
который он будет обертывать. Разница в том, что эта версия намного эффективнее.
Размер буфера BufferedReader
Метод BufferedReader.readLine ()
Пример: чтение всех строк файла в список
Это делается путем ввода каждой строки в файл и добавления ее в List<String>
. Затем список возвращается:
public List<String> getAllLines(String filename) throws IOException {
List<String> lines = new ArrayList<String>();
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
String line = null;
while ((line = reader.readLine) != null) {
lines.add(line);
}
}
return lines;
}
Java 8 предоставляет более сжатый способ сделать это с помощью метода lines()
:
public List<String> getAllLines(String filename) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
return br.lines().collect(Collectors.toList());
}
return Collections.empty();
}
Пример StringWriter
Класс Java StringWriter представляет собой поток символов, который собирает выходные данные из строкового буфера, который может использоваться для построения строки.
Класс StringWriter расширяет класс Writer.
В классе StringWriter системные ресурсы, такие как сетевые сокеты и файлы, не используются, поэтому закрытие StringWriter не требуется.
import java.io.*;
public class StringWriterDemo {
public static void main(String[] args) throws IOException {
char[] ary = new char[1024];
StringWriter writer = new StringWriter();
FileInputStream input = null;
BufferedReader buffer = null;
input = new FileInputStream("c://stringwriter.txt");
buffer = new BufferedReader(new InputStreamReader(input, "UTF-8"));
int x;
while ((x = buffer.read(ary)) != -1) {
writer.write(ary, 0, x);
}
System.out.println(writer.toString());
writer.close();
buffer.close();
}
}
Вышеприведенный пример помогает нам узнать простой пример StringWriter с использованием BufferedReader для чтения данных файла из потока.