Обнаружение основной причины исключения java.io.FileNotFoundException

StackOverflow https://stackoverflow.com/questions/1661050

Вопрос

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

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, жалующаяся на неверное имя пользователя или пароль.

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

Это было полезно?

Решение

Перед созданием самостоятельно проверьте наличие прав доступа к файлу / на чтение-запись 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
  ...
}

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top