检测java.io.FileNotFoundException的根本原因

时间:2009-11-02 12:35:17

标签: java localization file-permissions filenotfoundexception

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抱怨用户名或密码无效。

是否有一种方法可以解析异常消息以获得关于为什么发生异常的更精细的信息?消息解析的问题在于,在不同的语言环境中,消息会有所不同。

3 个答案:

答案 0 :(得分:10)

在创建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
  ...
}

答案 1 :(得分:2)

在尝试读取文件之前,您可能希望使用java.io.File对象查看文件的属性。有一个canRead方法可用于确定用户是否可以读取文件。

答案 2 :(得分:1)

一种方法是查看异常的实际类型:正如您在docs中看到的那样,有很多子类提供了更细粒度的信息。

然而,你可能不会那么远。与大多数已检查的异常一样,通常最好记录/报告异常,并要求用户选择如何纠正异常。