检测 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.File中试图读取该文件之前反对。有一个关于你可以用它来确定用户是否可以读取文件中的方法的CanRead
一种方法是查看异常的实际类型:正如你可以看到 文档, ,有很多子类提供更细粒度的信息。
然而,你可能不会走得太远。与大多数已检查的异常一样,通常最好记录/报告异常并询问用户如何纠正它的选择。
不隶属于 StackOverflow