Определить причину для java.io.FileNotFoundException - PullRequest
13 голосов
/ 02 ноября 2009

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

java.io.FileNotFoundException: \\server\share\directory\test.csv (Anmeldung fehlgeschlagen: unbekannter Benutzername oder falsches Kennwort)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
    at java.io.FileWriter.<init>(FileWriter.java:73)

В приведенном выше примере немецкая Windows жалуется на неверное имя пользователя или пароль.

Есть ли какой-нибудь способ разбора сообщения об исключениях, чтобы получить немного более подробную информацию о , почему именно произошло исключение? Проблема с разбором сообщений заключается в том, что в разных локалях сообщения будут различаться.

Ответы [ 3 ]

10 голосов
/ 02 ноября 2009

Перед созданием FileOutputStream.

выполните проверку на наличие файлов / разрешения на чтение и запись самостоятельно.
File test_csv = new File( "\\server\share\directory\test.csv" );

if ( test_csv.exists( ) && test_csv.canWrite( ) )
{
  // Create file writer
  ...
}
else
{
  // notify user
  ...
}

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

File test_csv = new File( "\\server\share\directory\test.csv" );
File parent_dir = test_csv.getParentFile( )

if ( parent_dir.exists( ) && parent_dir.canWrite( ) )
{
  // Create file writer
  ...
}
else
{
  // notify user
  ...
}
2 голосов
/ 02 ноября 2009

Возможно, вы захотите просмотреть свойства файла, используя объект java.io.File , прежде чем пытаться прочитать файл. Существует метод canRead, который вы можете использовать, чтобы определить, может ли пользователь прочитать файл.

1 голос
/ 02 ноября 2009

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

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

...