При каких обстоятельствах был бы java.util.zip. ZipFile.close () бросают IOException? Его сигнатура метода указывает, что может быть брошена, но от исходного кода, кажется, нет никакого места, где это могло произойти, если это не находится в собственном коде. Какие меры по ликвидации последствий, если таковые имеются, могли быть приняты в точке, где то исключение поймано?
Из документации API на ZipFile.close ()
:
Закрытие этого ZIP-файла закроет все входные потоки, ранее возвращенные вызовами метода
getInputStream
.
И InputStream.close ()
генерирует исключение IOException
, поэтому ZipFile.close ()
также должен его выбросить. Согласно документации API для InputStream.close ()
, он выдает исключение IOException
«в случае возникновения ошибки ввода-вывода». Это не очень наглядно, но бросает широкую сеть. InputStreams могут представлять потоки, поступающие из файловой системы, сети, памяти и т. Д. InputStreams могут включать буферы, которые необходимо очистить, сокеты, которые необходимо закрыть, ресурсы, которые необходимо освободить, блокировки, которые необходимо освободить, и т. Д. IOExceptions могут случаются по разным причинам.
Я не уверен, но думаю, что IOException выдается, когда происходит одно из следующих событий:
Причиной может быть гораздо больше событий, но это единственные два, о которых я мог думать прямо сейчас.
В документации для ZipFile.close ()
говорится:
Закрытие этого ZIP-файла приведет к закрытию всех ранее возвращенных входных потоков. вызовами метода getInputStream.
Предположительно, собственный метод close
выполняет закрытие InputStreams.
Метод close
для InputStream
имеет IOException
как проверенное исключение.
Наиболее вероятной причиной является нехватка места в файловой системе, в которую записывается zip-файл, ошибка в базовой файловой системе. Если вы не можете определить причину и устранить ее на лету, все, что вы можете сделать, это сообщить пользователю о состоянии.
От человека close (2):
Отсутствие проверки возвращаемого значения close () - распространенная, но, тем не менее, серьезная ошибка программирования. Вполне возможно, что об ошибках предыдущей операции записи (2) сначала сообщается при последнем закрытии (). Отсутствие проверки возвращаемого значения при закрытии файла может привести к тихой потере данных. Это особенно заметно при использовании NFS и дисковой квоты.