【问题标题】:Parse a properties file with groovy用 groovy 解析属性文件
【发布时间】:2013-05-26 23:29:14
【问题描述】:
我正在尝试从包含以下内容的属性文件中提取用户名和密码:
#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 个错误
提前致谢
【问题讨论】:
标签:
parsing
properties
groovy
【解决方案1】:
有趣的问题和答案。所有答案对我来说似乎都是正确的,但没有人回答根本原因。
ConfigSlurper 是一个简单的类,只有几个方法。最重要的方法被命名为parse。只有一种解析方法适用于属性。其他用于 Groovy 脚本文件。
因此,根据文档,您正在尝试从 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
【解决方案2】:
也许我在这里是个白痴,但更大的问题不是他使用 shell 样式的注释字符 (#) 而不是 groovy 注释(// 或 /* ... */)吗?
他的错误信息是因为#在unix脚本的开头应该跟!然后是解释器的路径。 (类似于 #!/bin/sed)
【解决方案3】:
您可以使用更惯用的方式来避免自己关闭流:
def props = new Properties()
new File("foo.properties").withInputStream { s ->
props.load(s)
}
【解决方案4】:
使用Properties 类型:
def props = new Properties()
def stream = new FileInputStream("foo.properties")
try {
props.load(stream)
} finally {
stream.close()
}
System.out.println(props)