Обнаружение основной причины исключения java.io.FileNotFoundException
-
12-09-2019 - |
Вопрос
Исключение 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, который вы можете использовать, чтобы определить, может ли пользователь прочитать файл.
Один из подходов заключается в том, чтобы посмотреть на фактический тип исключения:как вы можете видеть из Документы, существует множество подклассов, которые предоставляют более детальную информацию.
Однако на этом вы, вероятно, далеко не продвинетесь.Как и в случае с большинством проверяемых исключений, обычно лучше зарегистрировать исключение / сообщить о нем и попросить пользователя выбрать, как его исправить.