Получить значения из файла свойств с помощью Groovy
Как получить значения из файла свойств с помощью Groovy?
Мне нужно иметь файл свойств (.properties), в котором будут имена файлов в качестве ключа, а их путь назначения - как значение. Мне понадобится ключ, который будет разрешен во время выполнения, в зависимости от файла, который нужно переместить.
До сих пор я могу загрузить свойства, которые, кажется, не могут "получить" значение из загруженных свойств.
Я ссылался на поток: groovy: Как получить доступ к файлу свойств?, а следующий - фрагмент кода, который у меня есть до сих пор
def props = new Properties();
File propFile =
new File('D:/XX/XX_Batch/XX_BATCH_COMMON/src/main/resources/patchFiles.properties')
props.load(propFile.newDataInputStream())
def config = new ConfigSlurper().parse(props)
def ant = new AntBuilder()
def list = ant.fileScanner {
fileset(dir:getSrcPath()) {
include(name:"**/*")
}
}
for (f in list) {
def key = f.name
println(props)
println(config[key])
println(config)
def destn = new File(config['a'])
}
Файл свойств имеет следующие данные:
jan-feb-mar.jsp=/XX/Test/1
XX-1.0.0-SNAPSHOT.jar=/XX/Test/1
a=b
c=d
Правильные значения возвращаются, если я ищу, используя либо props.getProperty('a'),
или,
конфиг [ "а" ]
Также попробовал код: нотация
Но как только переключитесь на использование переменной "ключ", как в config [key], она вернется → [:]
Я новичок в groovy, не могу сказать, что мне здесь не хватает.
Ответы
Ответ 1
Мне кажется, вы слишком усложняете вещи.
Вот простой пример, который должен выполнить задание:
При заданном файле test.properties
:
a=1
b=2
Этот код работает нормально:
Properties properties = new Properties()
File propertiesFile = new File('test.properties')
propertiesFile.withInputStream {
properties.load(it)
}
def runtimeString = 'a'
assert properties."$runtimeString" == '1'
assert properties.b == '2'
Ответ 2
Если не требуется File
, и если загружаемый файл находится в папке src/main/resources
или src/test/resources
или в пути к классам, getResource()
- это еще один способ его решения.
например.
def properties = new Properties()
//both leading / and no / is fine
this.getClass().getResource( '/application.properties' ).withInputStream {
properties.load(it)
}
//then: "access the properties"
properties."my.key"
Ответ 3
На всякий случай...
Если ключ свойства содержит точку (.), то не забудьте поставить ключ в кавычки.
файл свойств:
a.x = 1
groovy:
Properties properties ...
println properties."a.x"
Ответ 4
Если бы была аналогичная проблема, мы решили ее с помощью:
def content = readFile 'gradle.properties'
Properties properties = new Properties()
InputStream is = new ByteArrayInputStream(content.getBytes());
properties.load(is)
def runtimeString = 'SERVICE_VERSION_MINOR'
echo properties."$runtimeString"
SERVICE_VERSION_MINOR = properties."$runtimeString"
echo SERVICE_VERSION_MINOR
Ответ 5
Properties properties = new Properties()
properties.load(new File("path/to/file.properties").newReader())