Подтвердить что ты не робот

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

4b9b3361

Ответ 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())