【问题标题】:java new file not returning a boolean when part of a conditional当条件的一部分时,java新文件不返回布尔值
【发布时间】:2020-05-21 10:03:23
【问题描述】:

在我的 Java 程序中,这会创建一个目录并在成功时返回一个布尔值 true:

new File(String.valueOf(subdir)).mkdir();

那么为什么它不能作为这个布尔值的第二部分呢?即,该目录没有被创建并且它没有返回一个布尔值 true。

if (!subdir.exists() || new File(String.valueOf(subdir)).mkdir()) {
    logger.error("subdir not created");
}

【问题讨论】:

  • 您遇到了什么错误,maint 的声明是什么?
  • 您将“或”与“和”混合在一起。条件没有错。
  • 除此之外,如果subdir 已经是File,正如调用subdir.exists() 所暗示的那样,使用new File(String.valueOf(subdir)) 而不是直接使用subdir 是没有意义的。跨度>

标签: java java-io


【解决方案1】:

如果第一个条件已经是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);
}

【讨论】:

  • 附带说明,最好使用 NIO:Files.createDirectories(maint.toPath()) 而不是 maint.mkdirs(),因为它会抛出异常,告诉您为什么操作失败。
猜你喜欢
  • 1970-01-01
  • 2011-12-08
  • 2017-01-10
  • 2017-05-24
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
相关资源
最近更新 更多