在使用GStringImpl
创建新文件对象时,我遇到了一些奇怪的错误。如果我使用GStringImpl
创建一个新文件(然后在该路径中列出文件),我得到一个空数组,没有错误,但是如果我只是一个普通的字符串,我会得到一个文件列表......虽然这在某种程度上是有道理的,但我认为某处会出现错误。
示例:
def thisIsAListOfFiles = new File("/absolute/fs/mount/point").listFiles()
def gString = "${StaticClass.propertyStringThatIsAnAbsoluteFilePath}"
def notAListOfFiles = new File(gString).listFiles()
关于这里发生了什么的任何想法?这是预期的行为吗?
更多信息:
我从一个带有一堆属性的属性文件开始,比如这个
com.mycompany.property = "/absolute/directory/path"
因为我不能轻易地将grailsApplication
注入非grails类(例如/src/groovy
中的任何内容),我将grailsApplication
注入bootstrap,并使用groovy config slurper从中读取属性文件classpath并在groovy类Config.groovy中设置为静态字符串值。那个groovy类然后在应用程序的任何地方都有我需要的所有属性的静态变量。
注意:这不是读取属性文件或沿着这些行的任何内容的问题。我在Config.filePathProperty
发生前记录new File(var).listFiles()
并正确设置该值。
答案 0 :(得分:1)
我很确定您的静态路径设置不正确。我运行以下代码作为测试:
String path = '/etc/'
print "String ($path): "
println(new File(path).listFiles().size())
def gpath = "${path}"
print "GString ($gpath): "
println(new File(gpath).listFiles().size())
class Foo {
static String path = '/etc/'
}
print "GString static ($Foo.path): "
println(new File("${Foo.path}").listFiles().size())
得到了这个结果(显然你的文件数会有所不同):
String (/etc/): 122
GString (/etc/): 122
GString static (/etc/): 122
我看到null
结果的唯一一次是路径无效时,例如:
assert new File("does-not-exist").listFiles() == null
您可以做的一件事就是消除GString,这在您的示例中是不必要的:
def notAListOfFiles = new File(StaticClass.propertyStringThatIsAnAbsoluteFilePath).listFiles()
但我相信你会在变量或文件路径或其他类似问题中找到拼写错误。