410013796724260
• Webmoney
R335386147728
Z369087728698
Потоки Reader и WriterАбстрактные классы Reader и Writer являются символьными потоками. Абстрактный класс ReaderКласс Reader обеспечивает поддержку символьного потока чтения аналогично тому, как это делает InputStream, реализующий модель байтового потока ввода. Методы Reader схожи с теми, которые объявлены в составе InputStream. Методы класса Reader
При реализации Reader требуется, чтобы производный класс (наследник) обеспечил практическое воплощение варианта метода read, осуществляющего чтение данных в массив символов, и версии метода close. Во многих случаях, однако, производительность операций может быть улучшена за счет переопределения в производных классах и других методов. Наследники класса Reader
Класс BufferedReaderШирокораспространенный в использовании класс BufferedReader считывает текст из символьного потока ввода, буферизируя прочитанные символы. Использование буфера призвано увеличить производительность чтения данных из потока. BufferedReader имеет следующие конструкторы : BufferedReader(Reader in) BufferedReader(Reader in, int sz) Примеры BufferedReader
BufferedReader br;
br = new BufferedReader(new FileReader("foo.in"));
br = new BufferedReader(new InputStreamReader(System.in));
В качестве примера рассмотрим программу подсчета общего количества символов и числа пробелов в символьном потоке чтения:
import java.io.*;
class CountSpaces
{
public static void main(String[] args) throws IOException
{
int chr;
int total;
int spaces = 0;
try {
Reader in = null;
if (args.length == 0)
in = new InputStreamReader(System.in);
else
in = new FileReader(args[0]);
for (total=0; (chr=in.read()) != -1; total++) {
if (Character.isWhitespace((char) chr))
spaces++;
}
System.out.println("Количество символов : " +
total + "\nКоличество пробелов : "+spaces);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Программе в качестве параметра передается имя файла в командной строке. Переменная in представляет символьный поток чтения. Если имя файла не задано, то используется стандартный поток ввода, System.in, после "вложения" его в объект типа InputStreamReader, который выполняет преобразование байтового потока ввода в символьный поток чтения. В противном случае создается объект типа FileReader, расширяющего класс Reader. В цикле for подсчитывается общее количество символов в файле. Кроме этого, с использованием метода isWhitespace класса Character выявляются символы пробела и вычисляется их количество, а затем на экран выводится результат. Абстрактный класс WriterАбстрактный класс Writer обеспечивает поддержку символьного потока записи аналогично тому, как это делает OutputStream, реализующий модель байтового потока вывода. Многие методы Writer схожи с теми, которые объявлены в OutputStream; помимо этого, в классе Writer предусмотрены некоторые другие полезные версии метода write. Методы класса WriterВсе методы класса вызывают исключение IOException при возникновении ошибки.
Классы, производные от Writer, должны реализовать вариант метода write, связанного с записью символов из части массива, а также методов close и flush. Все остальные методы Writer основаны на трех методах, названных выше. Это отличает Writer от класса OutputStream, в котором в качестве базового метода вывода предусмотрен вариант write, осуществляющий вывод одного байта, а для методов flush и close предложены реализации по умолчанию. Как и в случае с классом Reader, производительность операций может быть улучшена за счет переопределения в производных классах и других методов. Наследники класса Writer
Класс BufferedWriterШирокораспространенный в использовании класс BufferedWriter записывает текст в поток, предварительно буферизируя записываемые символы, тем самым снижая количество обращений к физическому носителю для записи данных. BufferedWriter имеет следующие конструкторы : BufferedWriter(Writer out) BufferedWriter(Writer out, int size) В качестве параметра out конструктор BufferedWriter принимает поток вывода, в который надо осуществить запись. Второй параметр size указывает на размер буфера. Пример использования классов FileWriter и BufferedWriter :
package examples;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.BufferedWriter;
public class WriteToFileExample
{
public static void main(String[] args)
{
try {
String content = "Данную строку запишем в файл";
File file = new File("C:/someDir/filename.txt");
// Если файл не существует, то создадим его
if (!file.exists())
file.createNewFile();
FileWriter fw;
fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close();
System.out.println("Запись завершена");
} catch (IOException e) {
e.printStackTrace();
}
}
}
|
