Государственный


УДК 004.432.045:004.738.5Java (075.8)



бет2/25
Дата05.04.2024
өлшемі4.07 Mb.
#497748
1   2   3   4   5   6   7   8   9   ...   25
Java. Потоки ввода-вывода. Работа с файлами. Кравчук А.С., Кравчук А.И., Кремень Е.В

УДК 004.432.045:004.738.5Java (075.8)
ББК 32.973.2-018.1я73-1
© Кравчук А. С., Кравчук А. И., Кремень Е. В., 2023
© БГУ, 2023

Оглавление



Введение 5
Потоки байтов 7
Класс InputStream 7
Класс OutputStream 8
Абстрактные классы Reader и Writer 9
Чтение и запись файлов. FileInputStream и FileOutputStream 12
Запись файлов и класс FileOutputStream 12
Чтение файлов и класс FileInputStream 14
Закрытие потоков 17
Класс Scanner 20
Работа с FileWriter и FileReader 25
Буферизованные потоки 27
Класс BufferedOutputStream 28
Класс BufferedInputStream 29
Буферизация символьных потоков. BufferedReader и
BufferedWriter 31
Сериализация/десериализация 33
Интерфейс Serializable 34
Сериализация. Класс ObjectOutputStream 34
Десериализация. Класс ObjectInputStream 36
Исключение данных из сериализации 38
Ввод/вывод сложных объектов 40
Совместимость версий объекта при сериализации 45
Класс File 47
Работа с каталогами 48
Работа с файлами 51
Класс Files и интерфейс Path, класс Paths 52
Класс Paths 52
Интерфейс Path аналог класса File 53
Создание ссылки типа Path 53
Некоторые методы интерфейса Path 54
Класс Files 57
Программное копирование файлов 58
Работа с содержимым файлов 59
Замечание о работе с ZIP- и JAR-архивами 61
Литература 63

Введение


Подавляющее большинство современных программ не существует изолированно, а требует интеграции с другими. Программа должна иметь возможность, как получить данные извне, так и передать данные кому-то еще. Большинство языков имеют в своем арсенале механизм передачи данных. Это может быть взаимодействие с файловой системой, передача данных по сети или передача данных из одной области памяти в другую в рамках одной программы.
Отличительной чертой многих языков программирования является работа с файлами и потоками. В Java основной функционал работы с потоками сосредоточен в классах из пакета java.io. В настоящее время добавлен более современный способ работы с потоками - Java NIO. Java NIO, или Java Non-blocking I/O (иногда переводят как Java New I/O) предназначен для реализации высокопроизводительных операций ввода-вывода. Для работы с архивами используются классы из пакета java.util.
Ключевым понятием здесь является понятие потока (stream).
Понятие «поток» в программировании довольно перегружено и может обозначать множество различных концепций. В общем поток (stream) можно рассматривать как абстрактное обозначение источника или приемника данных, которые способны обрабатывать информацию. В случае применительно к работе с файлами и вводом-выводом будем говорить о потоке (stream), как об абстракции, которая используется для чтения или записи информации (файлов, сокетов, текста консоли и т.д.).
Поток связан с реальным физическим устройством с помощью системы ввода-вывода Java. Может быть определен поток, который связан с файлом и через который можно вести чтение или запись файла. Это также может быть поток, связанный с сетевым сокетом, с помощью которого можно получить или отправить данные в сети. Все эти задачи: чтение и запись различных файлов, обмен информацией по сети, ввод-вывод в консоли решаются в Java с помощью потоков.
Большинство классов пакета java.io реализуют потоки последовательного доступа.
По направлению движения данных потоки последовательного доступа можно разделить на две группы: поток ввода и поток вывода. Объект, из которого можно считать данные, называется потоком ввода, а объект, в который можно записывать данные, - потоком вывода. Например, если надо считать содержание файла, то применяется поток ввода, а если надо записать в файл - то поток вывода.
Вторым критерием разделения потоков является тип передаваемых данных. Разделяют два вида потоков ввода/вывода: байтовые и символьные.
В итоге получаем четыре типа потоков. Для каждого из этих типов в Java есть отдельный базовый абстрактный класс. Абстрактными эти классы сделаны потому, что возможна передача данных между файлами, по сети и из одной области памяти в другую. Эту специфику учитывает и реализует уже специальный класс, который расширяет базовый абстрактный класс. При этом базовые функции для всех специальных классов одинаковые, что удобно для программистов. Подчеркнем еще раз, что концептуально все потоки по своей сути представляют одно и тоже. Это придает гибкость и универсальность концепции использования потоков.
Базовые абстрактные типы для четырех основных типов потоков:

  • InputStream,

  • OutputStream,

  • Reader,

  • Writer.

В основе всех классов, управляющих потоками байтов, находятся два абстрактных класса: InputStream (поток ввода) и OutputStream (поток вывода).
Для работы с потоками символов были добавлены абстрактные классы Reader (для чтения потоков символов) и Writer (для записи потоков символов).
Все остальные классы, работающие с потоками, являются наследниками этих абстрактных классов.
Универсальная схема работы с потоком в упрощенном виде выглядит

так:



  1. создается экземпляр потока;

  2. поток открывается для чтения или записи;

  3. производится чтение из потока/запись в поток;

  4. поток закрывается.



Замечание.
При работе с файлами обязательным условием является обработка исключительных ситуаций. В примерах продемонстрированы два существующих подхода: первый это обработка исключительной ситуации с помощью блока try…catch внутри метода, а второй перебрасывание исключительной (контролируемой/управляемой) ситуации из метода Java-машине с помощью синтаксической конструкции throws Исключение.


Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   ...   25




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет