Получать значения из файла свойств с помощью 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"