0

在使用GStringImpl. 如果我用 a 创建一个新文件(然后列出该路径中的文件)GStringImpl,我会得到一个空数组,并且没有错误,但是如果我只是一个普通字符串,我会得到一个文件列表......虽然这在我认为某处会出现错误的一种方式。

例子:

def thisIsAListOfFiles = new File("/absolute/fs/mount/point").listFiles()

def gString = "${StaticClass.propertyStringThatIsAnAbsoluteFilePath}"
def notAListOfFiles = new File(gString).listFiles()

对这里发生的事情有任何想法吗?这是预期的行为吗?

更多信息:

  • Groovy 版本:2.1.3
  • Grails 版本:2.2.2(当然这是在 grails 应用程序中)
  • Java 版本:OpenJDK 运行时环境(IcedTea 2.3.9)

我从一个包含一堆这样的属性的属性文件开始

com.mycompany.property = "/absolute/directory/path"

因为我不能轻易地注入grailsApplication非 grails 类(/src/groovy例如任何东西),所以我注入grailsApplication引导程序,并使用 groovy config slurper 从类路径中读取属性文件,然后将其设置为 groovy 类 Config.groovy 中的静态字符串值。然后,那个 groovy 类具有我在应用程序中任何地方需要的所有属性的静态变量。

注意:这不是读取属性文件或任何类似内容的问题。我Config.filePathProperty在发生之前记录了正确的new File(var).listFiles()值,并且该值已正确设置。

4

1 回答 1

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()

但我相信您会在变量或文件路径中发现拼写错误,或其他类似问题。

于 2013-05-18T02:50:50.190 回答