如何使用 groovy 读取文件并将其内容存储为变量?

Posted

技术标签:

【中文标题】如何使用 groovy 读取文件并将其内容存储为变量?【英文标题】:How to read file using groovy and store its contents are variables? 【发布时间】:2016-04-27 21:56:24 【问题描述】:

我正在寻找特定的方式来读取文件并将其内容存储为不同的变量。我的属性文件示例:

#Local credentials:
postgresql.url = xxxx.xxxx.xxxx
postgresql.username = xxxxxxx
postgresql.password = xxxxxxx
console.url = xxxxx.xxxx.xxx

目前我正在使用这个 java 代码来读取文件并使用变量:

  Properties prop = new Properties();
  InputStream input = null;

  try 
            input = new FileInputStream("config.properties");
            prop.load(input);
            this.postgresqlUser = prop.getProperty("postgresql.username")
            this.postgresqlPass = prop.getProperty("postgresql.password")
            this.postgresqlUrl = prop.getProperty("postgresql.url")
            this.consoleUrl = prop.getProperty("console.url")

         catch (IOException ex) 
            ex.printStackTrace();
         finally 
            if (input != null) 
                try 
                    input.close();
                 catch (IOException e) 
                
            
        
    

我的同事建议使用 groovy 方法来处理这个问题并提到了流,但我似乎找不到太多关于如何将数据存储在单独变量中的信息,目前我所知道的是 def text = new FileInputStream("config.properties").getText("UTF-8") 可以读取整个文件并将其存储在一个变量中,但不能分开。任何帮助将不胜感激

【问题讨论】:

***.com/questions/20871441/… @tim 谢谢,解决了我的问题,而不是所有这些尝试和捕获现在我可以使用propertiesFile.withInputStream 闭包。 【参考方案1】:

如果您愿意让您的属性文件键和类属性遵守命名约定,那么您可以很容易地应用属性文件值。这是一个例子:

def config = '''
#Local credentials:
postgresql.url = xxxx.xxxx.xxxx
postgresql.username = xxxxxxx
postgresql.password = xxxxxxx
console.url = xxxxx.xxxx.xxx
'''

def props = new Properties().with 
    load(new StringBufferInputStream(config))
    delegate


class Foo 
    def postgresqlUsername
    def postgresqlPassword
    def postgresqlUrl
    def consoleUrl

    Foo(Properties props) 
        props.each  key, value ->
            def propertyName = key.replaceAll(/\../)  it[1].toUpperCase() 
            setProperty(propertyName, value)
        
    


def a = new Foo(props)

assert a.postgresqlUsername == 'xxxxxxx'
assert a.postgresqlPassword == 'xxxxxxx'
assert a.postgresqlUrl == 'xxxx.xxxx.xxxx'
assert a.consoleUrl == 'xxxxx.xxxx.xxx'

在本例中,属性键通过删除 '.' 进行转换。并将以下字母大写。所以postgresql.url 变成了postgresqlUrl。然后只需遍历键并调用setProperty() 来应用值即可。

【讨论】:

【参考方案2】:

看看 ConfigSlurper:

http://mrhaki.blogspot.de/2009/10/groovy-goodness-using-configslurper.html

【讨论】:

同意。 ConfigSlurper 是使用传统 Java 属性文件的更好选择。让它变得轻而易举。

以上是关于如何使用 groovy 读取文件并将其内容存储为变量?的主要内容,如果未能解决你的问题,请参考以下文章

从文件中读取字符串并使用 Groovy 将它们放入数组中

如何在 zip 文件中生成 xls 文件并将其发送到电子邮件以在那里下载 - groovy [关闭]

使用python读取csv文件并将内容存储在数组中

如何使用 ES6 模块导入文件,并将其内容作为字符串读取?

如何将 BIM 360 文件的内容作为文件流读取并将其写入另一个流

如何生成输入数据并将其存储到本地文件中我们如何使用kafka读取此输入生成文件的数据