如何在Groovy中编写属性文件而不使用转义字符和单引号?

如何在Groovy中编写属性文件而不使用转义字符和单引号?,groovy,escaping,Groovy,Escaping,我有点像: 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()) new

我有点像:

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'

有什么解决办法吗?在Groovy中以unescaped key=value格式保存到属性文件?

JDK的内置
properties
类通过设计实现了转义。根据报告:

然后,将写出此属性表中的每个条目,每个条目一个 线路。对于每个条目,都会写入键字符串,然后是ASCII=,然后是 关联的元素字符串。对于键,所有空格字符都是 用前面的\字符写入。对于元素,前导空间 写入字符,但不写入嵌入或尾随空格字符 使用前面的\字符。键和元素字符#、!、=, 和:用前面的反斜杠书写,以确保 装载正确

但是,您可以通过自己对
属性
类进行子分类来覆盖此行为。您需要自己重写
load
store
方法,自己读/写。这将是非常直接的;这里有很好的例子:

您可以这样做:

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
读取中的属性,就不需要这样做,因为它应该取消转义任何转义字符