使用groovy解析属性文件

时间:2013-05-31 07:44:29

标签: parsing properties groovy

我正在尝试从包含以下内容的属性文件中提取用户名和密码

#Fri May 31 09:33:22 CEST 2013 
password=user40_31-05-2013 
username=user40_31-05-2013


File propertiesFile = new File('testdata.properties')
def config = new ConfigSlurper().parse(propertiesFile.toURL())
println(config.username)

我遇到了这个错误:

  

期待'!',找到'F'@   第1行,第2栏。#Fri May 31 09:33:22 CEST 2013       ^

     

1错误

提前致谢

4 个答案:

答案 0 :(得分:7)

您可以使用更加惯用的方式自行关闭流:

def props = new Properties()
new File("foo.properties").withInputStream { s ->
  props.load(s) 
}

答案 1 :(得分:1)

使用Properties类型:

def props = new Properties()
def stream = new FileInputStream("foo.properties")
try {
  props.load(stream)
} finally {
  stream.close()
}
System.out.println(props)

答案 2 :(得分:1)

也许我在这里是个白痴,但是他使用shell风格的评论字符(#)而不是常规评论(//或/ * ... * /)不是更大的问题? / p>

他的错误信息是因为unix脚本开头的#应该跟着!然后是解释器的路径。 (像#!/ bin / sed这样的东西)

答案 3 :(得分:0)

有趣的问题和答案。对我来说,所有答案似乎都是正确的,但没有人回答根本原因。

ConfigSlurper 是一个简单的类,只有很少的方法。最重要的方法被命名为 parse。只有一种解析方法适用于属性。其他用于 Groovy 脚本文件。

javadoc

因此根据文档,您正在尝试从 Groovy 脚本读取配置,而不是属性文件。这就是它抱怨如下消息的原因。因为 Groovy 脚本可能会在文件开头声明 shebang likes #!/usr/bin/env groovy

expecting '!', found 'F' @ line 1, column 2. #Fri May 31 09:33:22 CEST 2013 ^

1 error

这是根据您的代码进行的修改以解决问题

    Properties props = new Properties()
    new File('testdata.properties').withInputStream { props.load(it) }
    def config = new ConfigSlurper().parse(props)
    println config.username