Начиная с JDK 7 в Java появилась очень полезная и удобная разновидность оператора try — он называется try с ресурсами или try с автоматическим управлением ресурсами. Данный оператор применяется к ресурсам, реализующим интерфейс AutoCloseable (в нём определён метод close()), и отпадает необходимость заботиться о ручном закрытии ресурсов.
Общая форма оператора
Оператор try с ресурсами имеет следующую сигнатуру:
1 2 3 |
try (создание ресурса) { // использование ресурса } |
Если предполагается использование нескольких ресурсов, то они отделяются точкой с запятой.
1 2 3 |
try (создание ресурса1; создание ресурса2) { // использование ресурсов } |
Начиная в JDK 7 интерфейс AutoCloseable реализуют потоки. В том числе потоки ввода-вывода.
Демонстрация применения оператора try с ресурсами
В данном уроке мы напишем программу, которая копирует текстовый файл. В ней будем использовать оператор try с ресурсами.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package testconsoleforanycode; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class TestConsoleForAnyCode { public static void main(String[] args) { try(FileInputStream fis = new FileInputStream("in.txt"); FileOutputStream fos = new FileOutputStream("out.txt")) { int i; while((i = fis.read()) != -1) fos.write(i); } catch(IOException ex) { System.out.println(ex.toString()); } } } |
В строках 11, 12 создаются две локальные для блока try переменные: fis и fos. Это потоки ввода и вывода соответственно. Затем в цикле while (строки 16-17) происходит побайтовое чтение данных из входного файла и их запись в выходной файл. Когда метод read() возвратит значение -1 — значит достигнут конец файла.
В результате выполнения программы файл будет успешно скопирован.
Используя оператор try с ресурсами можно быть уверенным, что потоки всегда автоматически будут закрыты (с помощью неявного вызова метода close()): как при успешном выполнении кода в блоке, так и при возникновении исключительных ситуаций.
Как Вы видите, использование данной конструкции более компактно и более безопасно, поэтому в новых приложениях рекомендуется использовать данный подход при работе с потоками.
Поделиться в соц. сетях: