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