0

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

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

我有这个错误:

期待“!”,在第 1 行第 2 列找到“F”。#Fri May 31 09:33:22 CEST 2013 ^

1 个错误

提前致谢

4

4 回答 4

7

您可以使用更惯用的方式来避免自己关闭流:

def props = new Properties()
new File("foo.properties").withInputStream { s ->
  props.load(s) 
}
于 2013-05-31T08:38:28.523 回答
2

也许我在这里是个白痴,但更大的问题不是他使用 shell 样式的注释字符 (#) 而不是 groovy 注释(// 或 /* ... */)吗?

他的错误信息是因为 # 在 unix 脚本的开头应该跟 ! 然后是解释器的路径。(类似于#!/bin/sed)

于 2013-06-12T17:37:58.853 回答
1

使用属性类型:

def props = new Properties()
def stream = new FileInputStream("foo.properties")
try {
  props.load(stream)
} finally {
  stream.close()
}
System.out.println(props)
于 2013-05-31T08:10:16.863 回答
0

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

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

文档

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

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
于 2021-06-29T16:11:13.387 回答