【问题标题】: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 注释(// 或 /* ... */)吗?

      他的错误信息是因为#在un​​ix脚本的开头应该跟!然后是解释器的路径。 (类似于 #!/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)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-03-22
            • 1970-01-01
            • 2017-09-16
            • 2014-02-18
            • 1970-01-01
            • 2012-01-01
            相关资源
            最近更新 更多