- •4.1.1. Потоки ввода-вывода
- •4.1.2. Класс IOException
- •4.2.1. Класс InputStream
- •4.2.2. Класс OutputStream
- •4.3. Символьный ввод-вывод
- •4.3.1. Класс Reader
- •4.3.2. Класс Writer
- •4.4.1. Класс InputStreamReader
- •4.4.2. Класс OutputStreamWriter
- •4.5.1. Класс BufferedReader
- •4.5.2. Класс BufferedWriter
- •4.5.3. Класс PrintStream
- •4.6.1. Классы для файлового ввода-вывода
- •4.6.2. Копирование бинарного файла
- •4.6.3. Обработка текстового файла
- •4.7.1. Класс File
- •4.7.2. Пример работы с файловой системой
|
Таблица 4.2. Методы класса InputStream. |
|
|
public abstract int read() |
Читает следующий байт из потока ввода. |
|
Возвращает значение этого байта в диапазоне |
|
от 0 до 255 или -1, если достигнут конец потока. |
public int read(byte[] b) |
Последовательно читает байты из потока ввода |
|
и записывает их в массив b. Может быть |
|
прочитано от 0 до (b.length – 1) байт. |
|
Возвращает количество прочитанных байт или - |
|
1, если достигнут конец потока. |
public int read(byte[] b, int off, int len) |
Последовательно читает от 0 до len байт потока |
|
ввода и записывает их в массив b со |
|
смещением off. Возвращает количество |
|
прочитанных байт или -1, если достигнут конец |
|
потока. |
public long skip(long n) |
Пропускает n байт потока ввода. Возвращает |
|
количество действительно пропущенных байт |
|
от 0 до n. |
public int available() |
Возвращает количество байт потока ввода, |
|
которые могут быть прочитаны или пропущены |
|
в данный момент. |
public void close() |
Закрывает поток ввода и освобождает |
|
связанные с ним системные ресурсы. |
4.2.2. Класс OutputStream
Класс OutputStream отвечает за вывод бинарных данных. Поток создаётся вызовом конструктора OutputStream (). После окончания работы с потоком его необходимо закрыть с помощью метода close().
|
Таблица 4.3. Методы класса OutputStream. |
|
|
public abstract void write(int b) |
Записывает байт b в поток вывода. |
|
Записываются только младшие 8 бит аргумента |
|
b. |
public void write(byte[] b) |
Записывает последовательно все элементы |
|
массива b в поток вывода. |
public void write(byte[] b, int off, int len) |
Записывает len элементов массива b, начиная с |
|
off, в поток вывода. |
public void flush() |
Сбрасывает данные на физический носитель. |
public void close() |
Закрывает поток вывода и освобождает |
|
связанные с ним системные ресурсы. |
4.3. Символьный ввод-вывод
4.3.1. Класс Reader
Класс Reader отвечает за ввод символьных данных. Поток создаётся вызовом конструктора Reader(). После окончания работы с потоком его необходимо закрыть с помощью метода close().
|
Таблица 4.4. Методы класса Reader. |
|
|
public int read() |
Читает следующий Unicode-символ из потока. |
|
Возвращает значение прочитанного символа в |
|
диапазоне от \u0000 до \uFFFF или -1, если |
|
достигнут конец потока. |
public int read(CharBuffer target) |
Читает символы из потока ввода в буфер класса |
|
CharBuffer. Возвращает количество |
|
прочитанных символов или -1, если достигнут |
|
конец потока. |
public int read(char[] cbuf) |
Последовательно читает символы из потока |
|
ввода и записывает их в массив cbuf. Может |
|
быть прочитано от 0 до (cbuf.length – 1) |
|
символов. Возвращает количество прочитанных |
|
символов или -1, если достигнут конец потока. |
public abstract int read(char[] cbuf, int off, int len) |
Последовательно читает от 0 до len символов |
|
потока ввода и записывает их в массив cbuf со |
|
смещением off. Возвращает количество |
|
прочитанных символов или -1, если достигнут |
|
конец потока. |
public long skip(long n) |
Пропускает n символов потока ввода. |
|
Возвращает количество действительно |
|
пропущенных символов от 0 до n. |
public boolean ready() |
Возвращает true, если в данный момент можно |
|
прочитать хоть один символ из потока ввода. |
public abstract void close() |
Закрывает поток ввода и освобождает |
|
связанные с ним системные ресурсы. |
4.3.2. Класс Writer
Класс Writer отвечает за вывод символьных данных. Поток создаётся вызовом конструктора Writer(). После окончания работы с потоком его необходимо закрыть с помощью метода close().
|
Таблица 4.5. Методы класса Writer. |
|
|
public void write(int c) |
Записывает символ c в поток вывода. |
|
Записываются только младшие 16 бит |
|
аргумента c. |
public void write(char[] cbuf) |
Записывает последовательно все элементы |
|
массива cbuf в поток вывода. |
public abstract void write(char[] cbuf, int off, |
Записывает len элементов массива cbuf, |
int len) |
начиная с off, в поток вывода. |
public void write(String str) |
Записывает строку str в поток вывода. |
public void write(String str, int off, int len) |
Записывает len символов строки str, начиная с |
|
off, в поток вывода. |
public abstract void flush() |
Сбрасывает данные на физический носитель. |
public abstract void close() |
Закрывает поток вывода и освобождает |
|
связанные с ним системные ресурсы. |
4.4.Связьмеждубайтовымии символьными потоками
4.4.1. Класс InputStreamReader
Класс InputStreamReader конвертирует данные, получаемые из байтового потока, в их символьное представление. Данные декодируются в соответствие с указанной кодировкой в символы Unicode (тип char). Класс InputStreamReader является наследником класса Reader и, следовательно, реализует все его методы.
|
Таблица 4.6. Конструкторы и методы класса InputStreamReader. |
|
|
|
|
InputStreamReader(InputStream in) |
|
Создаёт класс InputStreamReader на основе |
|
|
байтового потока, используя кодировку по |
|
|
умолчанию. |
InputStreamReader(InputStream in, String |
|
Создаёт класс InputStreamReader на основе |
charsetName) |
|
байтового потока. Для преобразования данных |
|
|
используется кодировка charsetName. |
String getEncoding() |
|
Возвращает кодировку, в соответствие с |
|
|
которой преобразуются данные. |
Пример: |
|
|
Reader reader = new InputStreamReader(inputStream, "UTF-8"); |
||
4.4.2. Класс OutputStreamWriter
Класс OutputStreamWriter конвертирует символы, передаваемые в символьный поток, в их двоичное представление. Символы кодируются в соответствие с указанной кодировкой. Класс OutputStreamWriter является наследником класса Writer и, следовательно, реализует все его методы.
Таблица 4.7. Конструкторы и методы класса OutputStreamWriter.
OutputStreamWriter(OutputStream out) |
Создаёт класс OutputStreamWriter на основе |
|
байтового потока, используя кодировку по |
|
умолчанию. |
OutputStreamWriter(OutputStream out, String |
Создаёт класс OutputStreamWriter на основе |
charsetName) |
байтового потока. Для преобразования данных |
|
используется кодировка charsetName. |
String getEncoding() |
Возвращает кодировку, в соответствие с |
|
которой преобразуются данные. |
Пример: |
|
Writer writer = new OutputStreamWriter(outputStream, "UTF-8"); |
|
4.5.Буферизованный ввод-вывод
4.5.1. Класс BufferedReader
Класс BufferedReader буферизует символьный поток ввода, позволяя вводить символьные данные построчно.
|
Таблица 4.8. Конструкторы класса BufferedReader. |
|
|
BufferedReader(Reader in) |
Создаёт буферизованный поток ввода на |
|
основе существующего экземпляра класса |
|
Reader. Используется стандартный размер |
|
буфера. |
BufferedReader(Reader in, int sz) |
Создаёт буферизованный поток ввода на |
|
основе существующего экземпляра класса |
|
Reader с заданным параметром sz размером |
|
буфера. |
|
Таблица 4.9. Методы класса BufferedReader. |
|
|
public String readLine() |
Читает текст до символа конца строки и |
|
записывает его в объект класса String. |
Остальные методы унаследованы от класса Reader.
Пример:
BufferedReader in = new BufferedReader(reader); BufferedReader in = new BufferedReader(
new InputStreamReader(inputStream));
4.5.2. Класс BufferedWriter
Класс BufferedWriter буферизует символьный поток вывода, позволяя выводить символьные данные построчно.
|
Таблица 4.10. Конструкторы класса BufferedWriter. |
|
|
BufferedWriter(Writer out) |
Создаёт буферизованный поток вывода на |
|
основе существующего экземпляра класса |
|
Writer. Используется стандартный размер |
|
буфера. |
BufferedWriter(Writer out, int sz) |
Создаёт буферизованный поток вывода на |
|
основе существующего экземпляра класса |
|
Writer с заданным параметром sz размером |
|
буфера. |
|
Таблица 4.11. Методы класса BufferedWriter. |
|
|
public void newLine() |
Записывает символ конца строки в соответствие |
|
с системными установками. |
Остальные методы унаследованы от класса Writer.
Пример:
BufferedWriter out = new BufferedWriter(writer); BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(outputStream));
4.5.3. Класс PrintStream
Класс PrintStream предоставляет возможности форматирования выводимого текста. Он реализует такие методы, как print, println и printf.
4.6.Файловыйввод-вывод
4.6.1. Классы для файлового ввода-вывода
Для работы с файлами в Java созданы оболочки над базовыми классами ввода-вывода.
•FileInputStream – поток байтового ввода из файла.
•FileOutputStream – поток байтового вывода в файл.
•FileReader – поток символьного ввода из файла.
•FileWriter – поток символьного вывода в файл.
4.6.2. Копирование бинарного файла
В листинге 4.1 представлена программа, копирующая бинарный файл input.dat в файл output.dat и подсчитывающая количество скопированной информации.
