0

我的应用程序中有以下代码:

final File f = new File(path);

try {
    boolean folderCreated = f.mkdirs();

    // if dir wasn't created this time, and doesn't exist
    if (!folderCreated && !f.exists()) {
        throw new IOException("Unable to create path");
    }
} catch (SecurityException e) {
            throw new IOException("Unable to create path");
}

当我运行 findbugs(在 Android Studio 中)时,它会报告Bad Practice Bad use of return value from method Method ignores exceptional return value of java.io.File.mkdirs()

Javadoc 声明java.io.File.mkdirs()如果创建了目录,则返回 true,否则返回 false,或者如果目录已经存在,则进行!f.exists()检查。

我不想忽略 findbugs 消息——甚至是警告,但我不知道如何解决这个问题,因为显然正在检查返回值。

请注意,我try{...}catch (SecurityException){...}从这篇文章中添加了作为建议:https ://stackoverflow.com/a/23631948/1423896 ,但这没有任何区别。

4

3 回答 3

3

也许原因是你调用了f实例的方法,即使folderCreated是假的。相反,您可以在调用之前调用它f.mkdirs()

boolean folderExisted = f.exists() || f.mkdirs();
if (!folderExisted) {
    throw new IOException("Unable to create path");
}

参考:CheckReturnAnnotationDatabase.java

于 2015-09-03T13:48:46.857 回答
1

我不知道它是否相关,但最好将捕获的异常传递给创建的异常,如下所示(在最后几行):

try {
    boolean folderCreated = f.mkdirs();

    // if dir wasn't created this time, and doesn't exist
    if (!folderCreated && !f.exists()) {
        throw new IOException("Unable to create path");
    }
} catch (SecurityException e) {
    throw new IOException("Unable to create path", e);
}
于 2017-08-13T16:59:02.010 回答
0

使用if条件创建目录。这样您就可以消除 findbug 错误。这有效:

if (f.mkdir()) {
    System.out.println("directory " + f+ " created");
}
于 2017-09-25T13:08:21.377 回答