我有类似的东西:
def newProps = new Properties()
def fileWriter = new OutputStreamWriter(new FileOutputStream(propsFile,true), 'UTF-8')
def lineSeparator = System.getProperty("line.separator")
newProps.setProperty('SFTP_USER_HASH', userSftpHome.toString())
newProps.setProperty('GD_SFTP_URI', sftpHost.toString())
fileWriter.write(lineSeparator)
newProps.store(fileWriter, null)
fileWriter.close()
问题是store()方法使用反斜杠()转义“:”或“=”字符。我不希望这样,因为我存储了一些密码和令牌,并且需要严格按照key = value格式复制这些值。
此外,当我使用configSlurper时,它会使用单引号存储值,例如:
key='value'
有没有解决方法呢?将未转义的key = value格式保存到Groovy中的属性文件?
答案 0 :(得分:5)
你可以这样做:
def newProps = new Properties()
newProps.setProperty('SFTP_USER_HASH', 'woo')
newProps.setProperty('GD_SFTP_URI', 'ftp://woo.com')
propsFile.withWriterAppend( 'UTF-8' ) { fileWriter ->
fileWriter.writeLine ''
newProps.each { key, value ->
fileWriter.writeLine "$key=$value"
}
}
但是,只要您使用load
阅读属性,就不需要这样做,因为它应该撤消任何转义字符
答案 1 :(得分:1)
JDK内置的Properties
类可以通过设计逃脱。根据{{3}}:
然后写出这个Properties表中的每个条目,每个条目一个 线。对于每个条目,写入密钥字符串,然后是ASCII = 关联的元素字符串。对于密钥,所有空格字符都是 用前面的\字符写。对于元素,领先的空间 写入字符,但不写入嵌入或尾随空格字符 带有前面的\字符。键和元素字符#,!,=, 和:用前面的反斜杠写成,以确保它们是 装好了。
但是,您可以通过自己对Properties
类进行子类化来覆盖此行为。您需要自己覆盖load
和store
方法并自行读/写。这将是非常直接的;在这里找到了很好的例子:Docs