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 для чтения данных файла из потока.