Главная страница

33 Java. Потоки ввода-вывода. Работа с файлами. Белорусский государственный экономический университет кафедра экономической информатики


Скачать 1.6 Mb.
НазваниеБелорусский государственный экономический университет кафедра экономической информатики
Дата06.01.2023
Размер1.6 Mb.
Формат файлаdocx
Имя файла33 Java. Потоки ввода-вывода. Работа с файлами.docx
ТипЛитература
#874813
страница5 из 13
1   2   3   4   5   6   7   8   9   ...   13

Закрытие потоков


При завершении работы с потоком его надо закрыть с помощью метода close(), который определен в интерфейсе Closeable. Метод close() имеет следующей контракт:
void close() throws IOException
Интерфейс Closeable реализуется в классах InputStream и OutputStream, а через них и во всех классах потоков. При закрытии потока освобождаются все выделенные для него ресурсы, например, файл.

Есть два способа закрытия файла. Первый традиционный заключается в использовании блока try…catch…finally.
Пример.


Результат работы программы:



Поскольку при открытии или считывании файла может произойти ошибка ввода-вывода, то код считывания помещается в блок try. И чтобы быть уверенным, что поток в любом случае закроется, даже если при работе с ним возникнет ошибка, вызов метода close() помещается в блок finally. Так как метод close() также в случае ошибки может генерировать исключение IOException, то его вызов также помещается во вложенный блок try…catch.

Начиная с Java 7 можно использовать еще один способ, который автоматически вызывает метод close(). Этот способ заключается в использовании конструкции try-with-resources (try-с-ресурсами). Данная конструкция работает с объектами, которые реализуют интерфейс AutoCloseable. Так как все классы потоков реализуют интерфейс

Closeable, который в свою очередь наследуется от AutoCloseable, то их также можно использовать в данной конструкции

Перепишем предыдущий пример с использованием конструкции

try-with-resources.
Пример.


Результат работы программы совпадает с предыдущим. Формат конструкции try-with-resources, следующий:
try(ИмяКласса имяОбъекта = КонструкторКласса(парам)).
Отличительной особенностью является использование круглых скобок у ключевого слова try. В круглых скобках может быть перечислено через точку с запятой несколько операторов, открывающих разные потоки.

Подобная конструкция использовалась, в одном из примеров ранее.
Пример.

try(FileInputStream fin =

new FileInputStream("notes.txt"); FileOutputStream fos =

new FileOutputStream("notes_new.txt"))

{

//блок try

}

Данная конструкция также не исключает использования блоков catch. После окончания работы в блоке try у указанного в круглых скобках ресурса или перечисленных ресурсов (в данном случае у объекта FileInputStream) автоматически вызывается метод close().
Замечание.

Кроме того в настоящее время возможно автоматическоезакрытиепотоковввода/выводабезявноговызоваметода close().

1   2   3   4   5   6   7   8   9   ...   13


написать администратору сайта