Findbugs“方法忽略异常返回值”java.io.File.mkdirs()

时间:2015-09-03 01:59:34

标签: java findbugs mkdirs

我的应用中有以下代码:

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,但它没有任何区别。

3 个答案:

答案 0 :(得分:2)

可能原因是即使f为false,您也会调用folderCreated实例的方法。相反,您可以在调用f.mkdirs()之前调用它。

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

参考:CheckReturnAnnotationDatabase.java

答案 1 :(得分: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);
}

答案 2 :(得分:0)

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

if (f.mkdir()) {
    System.out.println("directory " + f+ " created");
}