Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
Эта иерархия очень схожа с аналогичной для байтовых потоков InputStream и OutputStream. Главное отличие между ними - Reader и Writer работают с потоком символов (char). Только, чтение массива символов в Reader описывается методом read(charfj), а запись в Writer -write(chartl).
В таблице 15.1 приведены соответствия классов для байтовых и
символьных потоков.
Как видно из таблицы, различия крайне незначительны и предсказуемы.
— I
В остальном же использование символьных потоков идентично работе с байтовыми потоками. Так, программный код для записи символьных данных в файл будет выглядеть примерно следующим образом:
String fileName = "d:\Yfile.txt";
//Строка, которая будет записана в файл
String data = "Some data to be written and read.\n";
try{
FileWriter fw = new FileWriter(fileName);
BufferedWriter bw = new BufferedWriter(fw);
System.out.println("Write some data to file:" + fileName);
// Несколько раз записать строку
for(int i=(int)(Math.random()*10);--i>=0;)
bw.write(data); bw.close();
// Считываем результат
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);
String s = null;
int count = 0;
System. out.printlnfRead data from file:" + fileName); // Считывать данные, отображая на экран while((s=br.readLine())!=null)
System.out.printlnfrow" + ++count + " read:" + s); br.close(); } catch (Exception e) { e.printStackTrace();
}
Классы-мосты InputStreamReader и OutputStreamWriter при преобразовании символов также используют некоторую кодировку. Ее можно задать, передав в конструктор в качестве аргумента ее название. Если оно не будет соответствовать никакой из известных кодировок, будет брошено исключение UnsupportedEncodingException