Получать значения из файла свойств с помощью Groovy
Как получить значения из файла свойств с помощью Groovy?
мне требуется файл свойств (.свойства), которые будут иметь имена файлов в качестве ключа и их путь назначения в качестве значения. Мне понадобится ключ для разрешения во время выполнения, в зависимости от файла, который необходимо переместить.
пока я могу загрузить свойства, кажется, но не могу "получить" значение из загруженных свойств.
Я сослался на поток: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
правильные значения, если я смотрю вверх, используя любой реквизит.getProperty ('a') или, config ['a'] Также попробовал код: notation
но как только переключитесь на использование переменной "key", как в config[key] он возвращает --> [:]
Я новичок в Groovy, не могу сказать, что мне здесь не хватает.
4 ответов
мне кажется, ты слишком все усложняешь.
вот простой пример, который должен выполнить эту работу:
для этого :
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'
на всякий случай...
Если ключ свойства содержит точку (.) тогда не забудьте поставить ключ в кавычки.
свойства:a.x = 1
груви:
Properties properties ...
println properties."a.x"
была аналогичная проблема, мы решили ее с помощью:
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
если 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"