Кто-либо когда-либо видел исключение, выданное при вызове близкого метода на каком-либо closable объекте?
Исключение IOException
будет выдано на close
, если окончательный сброс
завершится неудачно. Возможные причины включают:
OutputStreamWriter
или аналогичный, Я определенно видел некоторые из них. Остальные маловероятны.
Однако, если данные, которые вы пишете, важны, вы должны разрешить сбой close
. Например, если ваше приложение записывает критический файл, который заполняется файловой системой, вашему приложению лучше заметить это, прежде чем оно заменит старую копию файла усеченной версией.
Да, это не так уж редко, ИМХО, если вы работаете с чем-либо, кроме нелокальных файлов на диске .
Close () работает, если в этот момент закрываемый объект еще действителен и открыт. Многие вещи, такие как каналы, удаленные файлы и т. Д., Могут умереть преждевременно.
Кроме того, я видел код, который игнорирует ошибки при открытии и записи и по-прежнему пытается закрыть (например, в блоке finally).
Не в плане file-io, но в плане сокетов закрытие вызовет IOException
, когда другая сторона прервет соединение. Например, когда вы отправляете HTTP-запрос на (большую) веб-страницу, а затем сразу же уходите, щелкнув по другой ссылке на веб-странице (пока она не закончила загружаться), то на стороне сервера будет получен IOException
(или подкласс вроде ClientAbortException
в серверах Tomcat и клонах), когда выходной поток HTTP-ответа должен быть смыт/закрыт.
Я думаю, вы можете попытаться принудительно выполнить это, отключив диск, на котором находится ваш файл. А на каком Closable
? Я думаю, было бы легко получить что-то, что использует сокет для исключения исключения при закрытии.
Попробуйте выдернуть USB-накопитель с открытым файлом на нем. Если это не приведет к исключению, я буду очень удивлен.
Нет, но это возможно.Представьте, что существует OutputStream
, который по какой-то причине еще не записал в файл. Что ж, вызов close ()
сбрасывает данные, но если файл заблокирован - тогда возникает исключение IOException
.