Символьные потоки также определены в двух иерархиях классов. На их вершине находятся два абстрактных класса: Reader и Writer. Эти абстрактные классы управляют потоками символов Unicode. В языке Java предусмотрено несколько конкретных подклассов для каждого из них.
Скачать исходники для статьи можно ниже
Вот некоторые из них:
BufferedReader – Буферизированный входной символьный поток – цепной поток
BufferedWriter – Буферизированный выходной символьный поток – цепной поток
FileReader – Входной поток, читающий файл – поток для соединения
FileWriter – Выходной поток, пишущий в файл – поток для соединения
Reader – Абстрактный класс, описывающий символьный ввод
Writer – Абстрактный класс, описывающий символьный вывод
Абстрактные классы Reader и Writer определяют несколько ключевых методов, которые реализуют другие потоковые классы.
Два наиболее важных — это методы read() и write(), которые, соответственно читают и пишут символьные данные.
Эти методы переопределяются в производных потоковых классах.
Пример использования FileWriter и FileReader:
public class Main { public static void main(String[] args) throws IOException { File file = new File("file.txt"); FileWriter fWriter = new FileWriter(file); // создание символьного потока fWriter.write("Привет, дружище"); // запись файла fWriter.close(); // закрытие потока fWriter FileReader fReader = new FileReader(file); int g = fReader.read(); while (g != -1) { System.out.print((char) g); g = fReader.read(); // чтение символа из файла } fReader.close(); } }
Вывод программы:
Привет, дружище
Пример использования потоков для соединения FileWriter и FileReader и цепных потоков BufferedWriter и BufferedReader:
public class Main { public static void main(String[] args) throws IOException { File file = new File("file.txt"); FileWriter fWriter = new FileWriter(file); // создание символьного потока BufferedWriter bufferedWriter = new BufferedWriter(fWriter); // создание цепного буферизированного потока bufferedWriter.write("Привет, дружище"); // закрытие потока bufferedWriter bufferedWriter.close(); // закрытие потока bufferedWriter приводит к автоматическому // закрытию потока fWriter FileReader fReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fReader); String s = bufferedReader.readLine(); // метод readLine() читает строку целиком while (s != null) { System.out.print(s); s = bufferedReader.readLine(); } bufferedReader.close(); } }
Вывод программы:
Привет, дружище