Как расширить файл в Groovy? - PullRequest
0 голосов
/ 17 января 2020

У меня есть файл YAML ('config.yaml') с таким содержанием:

egress:
  hostName: example.com
  tls:
    - hosts:
        - example.com

Как расширить этот файл в groovy?

Результат должен быть таким:

egress:
  hostName: example.com
  tls:
    - hosts:
        - example.com
tag: 1.1.1

Спасибо!

1 Ответ

1 голос
/ 17 января 2020

Это зависит.

Если вы хотите рассматривать config.yaml как обычный текстовый файл, то вы можете просто использовать обычные Groovy способы работы с IO:

String path = 'path/to/file'
File cfgFile = new File(path, 'config.yml')
cfgFile.withWriterAppend() { writer ->
    writer.writeLine('\ntag: 1.1.1')
}

или просто

new File(path, 'config.yml') << '\ntag: 1.1.1'

Но если вы хотите создать что-то более сложное и осведомленное о формате YAML этого файла, то вы можете использовать библиотеку SnakeYaml:

@Grapes([
    @Grab(group='org.yaml', module='snakeyaml', version='1.25')
])
import org.yaml.snakeyaml.Yaml

String path = '../data/'
File cfgFile = new File(path, 'config.yaml')

Yaml yaml = new Yaml()
Map content = [:]
cfgFile.withReader { reader ->
    content = yaml.load(reader)
}

content.put('tag', '1.1.1')

cfgFile.withWriter { writer ->
    yaml.dump(content, writer)
}

Если вы используете Groovy 3.0+, тогда вы вместо этого можно использовать встроенные YamlSlurper и YamlBuilder.
(Groovy 3.0 еще не выпущено на момент написания этого ответа)

Один из недостатков здесь заключается в том, что анализ и перезапись Файл yaml избавится от комментариев и переформатирует весь файл.

...