java File.createNewFile偶尔执行程序的其余部分之前抛出IOException

我有这个项目,我正在做什么,无论什么原因,每当我执行程序,并把它(我设置和所有)所需的给定参数,偶尔IOException抛出之前执行其他任何事情。 这似乎是真的,因为我到处都有伐木工人,没有人被解雇。 但是,似乎只是记录器不被解雇,因为当我看着我输出的JSON文件,它表明,它没有执行的第一步,只是没有记录器。 我是新的log4j2,所以它可能是,但我不知道(记录器不被解雇),但它似乎很奇怪,IOException应该不会发生。 因为当我在崩溃后再次执行它,它运行得很好。

(注意:这是在kotlin / jvm中,但这是关于使用JDK File类的)

这里抛出exception: https : //github.com/AlexCouch/projauto/blob/master/src/main/java/thinkingcouch/projauto/Save.kt#L114

我在使用Intellij IDEA 2017.3的MacOSX High Sierra。

所以最终发生了什么是我有这个function在这里隔离给定的路径的某些部分被追加到一个新的路径,并保存到JSON供以后使用

 fun Path.splitPathWithContext(context: String): File{ val presplit = this.normalize() logger.info("presplit: $presplit") logger.info("context: $context") if(presplit.toString() == context){ logger.info("Path and context are the same.") return presplit.toFile() } val reg = Pattern.compile("\\b$context\\b") val ret = presplit.toString().split(reg)[1] logger.info("ret: $ret") return File(ret) } 

解决方案是对上下文variables进行严格的模式检查,以便它不会切断包含该字符串的单词,但不完全是该字符串,而且需要精确。 这解决了我的问题。 没有更多的问题,没有更多的路径,我也修复了我的记录器。 我不知道究竟是什么导致它不做任何日志记录,但我通过将根级别设置为“全部”,然后删除所有我的其他记录器元素来解决它,因为这是我所需要做的。