когда делает java.util.zip. ZipFile.close () бросают IOException?

При каких обстоятельствах был бы java.util.zip. ZipFile.close () бросают IOException? Его сигнатура метода указывает, что может быть брошена, но от исходного кода, кажется, нет никакого места, где это могло произойти, если это не находится в собственном коде. Какие меры по ликвидации последствий, если таковые имеются, могли быть приняты в точке, где то исключение поймано?

6
задан Bill the Lizard 4 May 2010 в 15:07
поделиться

4 ответа

Из документации API на ZipFile.close () :

Закрытие этого ZIP-файла закроет все входные потоки, ранее возвращенные вызовами метода getInputStream .

И InputStream.close () генерирует исключение IOException , поэтому ZipFile.close () также должен его выбросить. Согласно документации API для InputStream.close () , он выдает исключение IOException «в случае возникновения ошибки ввода-вывода». Это не очень наглядно, но бросает широкую сеть. InputStreams могут представлять потоки, поступающие из файловой системы, сети, памяти и т. Д. InputStreams могут включать буферы, которые необходимо очистить, сокеты, которые необходимо закрыть, ресурсы, которые необходимо освободить, блокировки, которые необходимо освободить, и т. Д. IOExceptions могут случаются по разным причинам.

7
ответ дан 16 December 2019 в 21:36
поделиться

Я не уверен, но думаю, что IOException выдается, когда происходит одно из следующих событий:

  • ZIP-файл был удален кем-то / кем-то вне приложения.
  • Когда диск, содержащий zip-файл, размонтирован / отключен

Причиной может быть гораздо больше событий, но это единственные два, о которых я мог думать прямо сейчас.

0
ответ дан 16 December 2019 в 21:36
поделиться

В документации для ZipFile.close () говорится:

Закрытие этого ZIP-файла приведет к закрытию всех ранее возвращенных входных потоков. вызовами метода getInputStream.

Предположительно, собственный метод close выполняет закрытие InputStreams.

Метод close для InputStream имеет IOException как проверенное исключение.

Наиболее вероятной причиной является нехватка места в файловой системе, в которую записывается zip-файл, ошибка в базовой файловой системе. Если вы не можете определить причину и устранить ее на лету, все, что вы можете сделать, это сообщить пользователю о состоянии.

0
ответ дан 16 December 2019 в 21:36
поделиться

От человека close (2):

Отсутствие проверки возвращаемого значения close () - распространенная, но, тем не менее, серьезная ошибка программирования. Вполне возможно, что об ошибках предыдущей операции записи (2) сначала сообщается при последнем закрытии (). Отсутствие проверки возвращаемого значения при закрытии файла может привести к тихой потере данных. Это особенно заметно при использовании NFS и дисковой квоты.

1
ответ дан 16 December 2019 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: