Java 前缀“File:”的Groovy文件列表行为

Java 前缀“File:”的Groovy文件列表行为,java,file,grails,groovy,spring-integration,Java,File,Grails,Groovy,Spring Integration,似乎在最近的groovy中,java文件对象知道以“File:”前缀开头指定的目录路径存在,但不会列出其中的文件。下面是groovyConsole中的一个简明示例: File f1 = new File("/Users/michael/input") println "f1 exists: ${f1.exists()}" println "f1 list: ${f1?.listFiles()}" File f2 = new File("file:/Users/michael/input") pr

似乎在最近的groovy中,java文件对象知道以“File:”前缀开头指定的目录路径存在,但不会列出其中的文件。下面是groovyConsole中的一个简明示例:

File f1 = new File("/Users/michael/input")
println "f1 exists: ${f1.exists()}"
println "f1 list: ${f1?.listFiles()}"
File f2 = new File("file:/Users/michael/input")
println "f2 exists: ${f2.exists()}"
println "f2 list: ${f2?.listFiles()}"
f1 listFiles工作正常,f2 listFiles返回空列表

我遇到了这样的调试,为什么升级到4.0.3的spring集成突然停止了与升级到2.4.3的grails的合作

spring集成示例代码使用“file:”前缀。该代码在maven/java构建下运行良好,但将相同的示例代码添加到一个普通的grails应用程序中,它就不再工作了


有什么解释吗?

据我所知,Groovy在构建新文件时没有任何魔力。这是标准的JDK行为。要使用文件:您必须向新文件传递URI。。。而不是一根绳子


可能您的工作目录中有一个名为file:/Users/michael/input的文件,其中包含文件:。

添加println f2 path:${f2?.absolutePath}。您可能会感到惊讶……是的,spring集成示例文件似乎有一个bug。测试线束代码自动创建该奇怪路径并填充它。谢谢然而,为了打破这一局面,一些事情仍然发生了变化。我想,在一个较旧的spring集成中,有一种东西用来自动从配置字符串中删除“file:”前缀,但现在没有了。
new File("/Users/nobody/Desktop").absolutePath
===> /Users/nobody/Desktop

new File("file:/Users/nobody/Desktop").absolutePath
===> /Users/nobody/Development/Grails/String/file:/Users/nobody/Desktop
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     this is the path to my grails test project

new File("file:/Users/nobody/Desktop".toURI ()).absolutePath
===> /Users/nobody/Desktop