在我的Java程序中,这将创建一个目录,并在成功时返回布尔值true:
new File(String.valueOf(subdir)).mkdir();
那么为什么这不能作为布尔的第二部分呢?即,未创建目录,并且它不会返回布尔值true。
if (!subdir.exists() || new File(String.valueOf(subdir)).mkdir()) {
logger.error("subdir not created");
}
如果第一个条件已经为true
并且使用OR ||
运算符将这些条件合并在一起,则不会计算第二个条件。
类似地,如果第一个条件为&&
,则不会为AND false
运算符计算第二个条件。
对于逻辑运算,它是所谓的short circuit
-因为如果已经定义了表达式的结果,则继续评估其他术语是没有意义的。
false && any_operand == false
true || any_operand == true
因此,在您的情况下,您需要在条件中使用&&
,并且如果不存在父目录,则可能使用File::mkdirs()
方法创建父目录:
if (!maint.exists() && !maint.mkdirs()) {
logger.info("no directories {} created", maint);
}