我的应用中有以下代码:
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,但它没有任何区别。
答案 0 :(得分:2)
可能原因是即使f
为false,您也会调用folderCreated
实例的方法。相反,您可以在调用f.mkdirs()
之前调用它。
boolean folderExisted = f.exists() || f.mkdirs();
if (!folderExisted) {
throw new IOException("Unable to create path");
}
答案 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");
}