
- •Лабораторная работа № 3 Обработка файлов
- •Введение
- •Класс InputStream
- •Класс OutputStream
- •Файловый ввод/вывод
- •Буферизованные потоки
- •Класс File
- •Класс RandomAccessFile
- •Пример подсчета количества определенного слова в файле
- •Пример объекта "Книга" с методами чтения и записи в файл
- •Работа с конфигурационными файлами
- •Пример класса preloader для загрузки конфигурационного файла
- •Контрольные вопросы
- •Задание
- •Приложение 1. Работа с датой и временем в Java
- •Приложение 2. Класс StreamTokenizer
Лабораторная работа № 3 Обработка файлов
Цель работы: получить навыки работы с символьными и байтовыми потоками ввода/вывода на языке Java.
Продолжительность работы - 4 ч.
Оглавление
Введение 3
Класс InputStream 3
Класс OutputStream 4
Файловый ввод/вывод 6
Буферизованные потоки 6
Класс File 7
Класс RandomAccessFile 10
InputStreamReader и OutputStreamWriter 11
Пример подсчета количества определенного слова в файле 12
Пример объекта "Книга" с методами чтения и записи в файл 13
Работа с конфигурационными файлами 15
Пример класса preloader для загрузки конфигурационного файла 16
Контрольные вопросы 18
Задание 19
Приложение 1. Работа с датой и временем в Java 21
Пример. Вывод текущего времени 21
Пример. Манипуляции с датой: получение текущей, создание новой, проверки 21
Приложение 2. Класс StreamTokenizer 22
Введение
Базовым пакетом для обеспечения операций ввода/вывода в Java является java.io. В нём определяется несколько абстрактных классов, которые затем расширяются, и на их основе создаются некоторые полезные типы. Потоки почти всегда являются парными: если существует FileInputStream, то есть и FileOutputStream.
Класс InputStream
В абстрактном классе InputStream объявляются методы для чтения из заданного источника. InputStream является базовым классом для большинства входных потоков в java.io и содержит следующие методы, которые (кроме конструктора) при обнаружении ошибки во входном потоке возбуждают исключение IOException:
public InputStream()
Класс InputStream содержит только безаргументный конструктор.
public abstract int read() throws IOException
Читает из потока один байт данных и возвращает прочитанное значение, лежащее в диапазоне от 0 до 255 (не от –128 до 127). При достижении конца потока возвращается флаг –1. Метод блокирует работу программы до появления значения на входе.
public int read(byte[] buf)
Читает данные в массив байтов. Метод блокирует работу программы до появления вводимого значения, после чего заполняет buf всеми прочитанными байтами, в количестве не более buf.length. Метод возвращает фактическое количество прочитанных байтов или –1 при достижении конца потока.
public int read(byte[] buf, int off, int len)
Читает данные в байтовый подмассив. Метод блокирует работу программы до начала ввода, после чего заполняет часть массива buf, начиная со смещения off, в количестве до len байтов, если не встретится конец массива buf.
public long skip(long count)
Пропускает до count байтов во входном потоке. Количество пропущенных байтов может быть меньше count из-за достижения конца потока. Возвращает фактическое количество пропущенных байтов.
public int available()
Возвращает количество байтов, которые могут быть прочитаны без блокировки работы программы.
public void close()
Закрывает входной поток. Метод должен вызываться для освобождения любых ресурсов (например, файловых дескрипторов), связанных с потоком. Если не сделать это, то ресурсы будут считаться занятыми, пока сборщик мусора не вызовет метод finalize данного потока.