java 新文件在条件的一部分时不返回布尔值
java new file not returning a boolean when part of a conditional
在我的 Java 程序中,这会创建一个目录,并且 return 成功时会返回一个布尔值 true:
new File(String.valueOf(subdir)).mkdir();
那么为什么它不能作为这个布尔值的第二部分呢?即,目录没有被创建,它没有 return 布尔值 true.
if (!subdir.exists() || new File(String.valueOf(subdir)).mkdir()) {
logger.error("subdir not created");
}
如果第一个条件已经是true
并且条件是用OR ||
运算符连接的,则不会计算第二个条件。
同样,如果第一个条件是 false
,则不会为 AND &&
运算符计算第二个条件。
它被称为 short circuit
用于逻辑运算 - 因为如果表达式的结果已经定义,继续计算其他项是没有意义的:
false && any_operand == false
true || any_operand == true
因此,在您的情况下,您需要在条件中使用 &&
并可能使用 File::mkdirs()
方法创建父目录(如果它们不存在):
if (!maint.exists() && !maint.mkdirs()) {
logger.info("no directories {} created", maint);
}
在我的 Java 程序中,这会创建一个目录,并且 return 成功时会返回一个布尔值 true:
new File(String.valueOf(subdir)).mkdir();
那么为什么它不能作为这个布尔值的第二部分呢?即,目录没有被创建,它没有 return 布尔值 true.
if (!subdir.exists() || new File(String.valueOf(subdir)).mkdir()) {
logger.error("subdir not created");
}
如果第一个条件已经是true
并且条件是用OR ||
运算符连接的,则不会计算第二个条件。
同样,如果第一个条件是 false
,则不会为 AND &&
运算符计算第二个条件。
它被称为 short circuit
用于逻辑运算 - 因为如果表达式的结果已经定义,继续计算其他项是没有意义的:
false && any_operand == false
true || any_operand == true
因此,在您的情况下,您需要在条件中使用 &&
并可能使用 File::mkdirs()
方法创建父目录(如果它们不存在):
if (!maint.exists() && !maint.mkdirs()) {
logger.info("no directories {} created", maint);
}