Классы символьных потоков
1. Класс Reader
Класс Reader - абстрактный класс, определяющий символьный потоковый ввод. В случае ошибок все методы класса передают исключение IOException.
Методы класса Reader:
Существует 3 основных read() метода:
- int read() - возвращает представление очередного доступного символа во входном потоке в виде целого числа.
- int read(char[] buffer) - пытается прочесть максимум buffer.length символов из входного потока в массив buffer. Возвращает количество символов, в действительности прочитанных из потока.
- int read(char[] buffer, int offset, int length) - пытается прочесть максимум length символов, расположив их в массиве buffer, начиная с элемента offset. Возвращает количество реально прочитанных символов.
- close() – метод закрывает поток.
2. Класс Writer
Класс Writer - абстрактный класс, определяющий символьный потоковый вывод. В случае ошибок все методы класса передают исключение IOException.
Методы класса Writer:
Существуют 5 основных write() - метода:
- void write(int c) – записывает один символ в поток.
- void write(char[] buffer) – записывает массив символов в поток.
- void write(char[] buffer, int offset, int length) – записывает в поток подмассив символов длиной length, начиная с позиции offset.
- void write(String aString) – записывает строку в поток.
- void write(String aString, int offset, int length) – записывает в поток подстроку символов длиной length, начиная с позиции offset.
3. Класс FileWriter
Класс FileWriter создаёт объект класса, производного от класса Writer, который вы можете применять для записи файла. Создание объекта не зависит от наличия файла, он будет создан в случае необходимости. Если файл существует и он доступен только для чтения, то передаётся исключение IOException.
4. Класс FileReader
Класс FileReader, производный от класса Reader, можно использовать для чтения содержимого файла. В конструкторе класса нужно указать либо путь к файлу, либо объект типа File.
Пример 1. Использование FileWriter и FileReader
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterReaderExample {
public static void main(String[] args) {
char[] array = new char[50];
int size = 0;
File file = new File("fileWrite.txt");
try (FileWriter fw = new FileWriter(file);
FileReader fr = new FileReader(file)) {
fw.write("Learn\nJava!\n");
fw.flush();
size = fr.read(array);
System.out.println("Количество прочитанных символов: "
+ size + " ");
for (int i = 0; i < size; i++) {
System.out.print(array[i]);
}
} catch (IOException e) {
System.out.print(e.getMessage());
}
}
}
5. Класс BufferedWriter
Класс BufferedWriter записывает текст в поток, предварительно буферизируя записываемые символы, тем самым снижая количество обращений к физическому носителю для записи данных.
По сравнению с классом FileWriter, BufferedWriter записывает относительно большие куски данных в файл, минимизируя количество обращений к файлу. Другими словами операции проходят быстрее.
Добавляет метод void newLine().
Конструкторы класса BufferedWriter:
BufferedWriter(Writer out);
BufferedWriter(Writer out, int sz);
В качестве параметра он принимает поток вывода, в который надо осуществить запись. Второй параметр указывает на размер буфера.
Пример 2. Использование класса BufferedWriter
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterExample {
public static void main(String[] args) {
try (BufferedWriter bufferedWriter = new BufferedWriter(
new FileWriter("src\\io\\buffWriter.txt"))) {
String text = "Привет мир!";
bufferedWriter.write(text);
bufferedWriter.newLine();
bufferedWriter.write(text);
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
6. Класс BufferedReader
Класс BufferedReader считывает текст из символьного потока ввода, буферизируя прочитанные символы. Использование буфера призвано увеличить производительность чтения данных из потока.
Добавляет метод String readLine().
Конструкторы класса BufferedReader:
BufferedReader(Reader in);
BufferedReader(Reader in, int sz);
Второй конструктор определяет потока ввода для чтения, а также размер буфера, в который будут считываться символы.
Пример 3. Использование класса BufferedReader
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(
new FileReader("src\\io\\file.txt"))) {
String str;
while ((str = br.readLine()) != null) {
System.out.println(str);
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
7. Класс PrintWriter
Класс PrintWriter расширяет класс Writer. Содержит методы для форматирования.
Конструкторы класса PrintWriter:
- PrintWriter(File file) - автоматически добавляет информацию в указанный файл.
- PrintWriter(String fileName) - автоматически добавляет информацию в файл по указанному имени.
- PrintWriter(OutputStream out) - для вывода информации используется существующий объект OutputStream, автоматически сбрасывая в него данные.
- PrintWriter(Writer out) - для вывода информации используется существующий объект Writer, в который автоматически идет запись данных.
Методы класса PrintWriter:
- println() - вывод строковой информации с переводом строки.
- print() - вывод строковой информации без перевода строки.
- printf() - форматированный вывод.
- format() - форматированный вывод.
Пример 4. Использование класса PrintWriter
import java.io.IOException;
import java.io.PrintWriter;
public class PrintWriterExample {
public static void main(String[] args) {
String s1 = "Привет мир!";
String s2 = "Hello World!";
try (PrintWriter printWriter = new PrintWriter("notes.txt")) {
printWriter.println(s1);
int i = 2;
printWriter.printf("Квадрат числа %d равен %d %n", i, i * i);
printWriter.write(s2);
printWriter.print("Конец");
System.out.println("Запись в файл произведена");
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
8. Классы символьных потоков
Класс | Назначение |
BufferedReader | Буферизованный входной символьный поток. |
BufferedWriter | Буферизованный выходной символьный поток. |
CharArrayReader | Входной поток, который читает из символьного массива. |
CharArrayWriter | Выходной поток, который пишет в символьный массив. |
FileReader | Входной поток, читающий файл. |
FileWriter | Выходной поток, пишущий в файл. |
FilterReader | Фильтрующий читатель. |
FilterWriter | Фильтрующий писатель. |
InputStreamReader | Входной поток, транслирующий байты в символы. |
LineNumberReader | Входной поток, подсчитывающий строки. |
OutputStreamWriter | Выходной поток, транслирующий байты в символы. |
PipedReader | Входной канал. |
PipedWriter | Выходной канал. |
PrintWriter | Выходной поток, включающий print() и println(). |
PushbackReader | Входной поток, позволяющий возвращать символы обратно в поток. |
Reader | Абстрактный класс, описывающий символьный ввод. |
StringReader | Входной поток, читающий из строки. |
StringWriter | Выходной поток, пишущий в строку. |
Writer | Абстрактный класс, описывающий символьный вывод. |
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.