Программно определяя причину IOException?

Там какой-либо путь состоит в том, чтобы программно дифференцироваться между тем, что вызвало IOException? Например, Java бросит IOException, если была ошибка во время записи. Как я могу сказать, если это похоже на что-то нарушение прав доступа, если Диск вне свободного пространства, если кто-то разъединил сетевой диск или другие вещи?

Я не могу действительно проанализировать сообщение с тех пор, кажется, нет никакого стандартизированного формата сообщения, Sun (или Oracle теперь, я предполагаю), кажется, не имеет вида стандартизированного формата.

(Я должен использовать Java для фиксации очень поврежденной системы на работе.)

8
задан Cœur 21 January 2019 в 11:50
поделиться

2 ответа

К сожалению, в Java нет аналога System.Runtime.InteropServices.Marshal.GetHRForException() из .NET. Вы можете сказать, что это была за ошибка ввода-вывода, только если исключение является экземпляром подкласса, например FileNotFoundException.

5
ответ дан 5 December 2019 в 23:13
поделиться

Получив точный класс исключения, вы получите один из нескольких возможных подклассов IOException, и они довольно стандартизированы. Вы можете либо проверить классы с помощью instanceof, либо (грубый подход) сравнить строки, возвращаемые из getClass().getName().

Есть некоторые обходные пути для других вещей; вы можете сделать File.canWrite() для файла, который вы собираетесь открыть для записи (ну, ваша программа должна была сделать это в любом случае, если имя и/или каталог могут меняться), и если есть шанс, что у вас закончилось место в файле, вы можете попробовать записать небольшой файл в известное хорошее место и посмотреть, не взорвется ли он у вас. Не очень элегантно, я знаю: Java не очень известен как язык системного программирования.

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

0
ответ дан 5 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

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