2012-03-12 3 views

ответ

65

Вы правы, что java.util.Properties не имеет метод для чтения из String - но на самом деле она имеет более общие методы, которые считывают из InputStream или Reader.

Таким образом, вы можете позвонить load, если у вас есть способ представить ваш String как любой из этих, то есть источник, который эффективно выполняет итерации по символам один за другим. Это похоже на то, что оно должно существовать, и действительно это так - java.io.StringReader.

Собираем вместе, то довольно проста:

public Properties parsePropertiesString(String s) { 
    // grr at load() returning void rather than the Properties object 
    // so this takes 3 lines instead of "return new Properties().load(...);" 
    final Properties p = new Properties(); 
    p.load(new StringReader(s)); 
    return p; 
} 
+1

Спасибо andrzej, это просто помогло мне после нескольких часов попробовать конвертировать и репозиторию Amazon S3 динамически с помощью jets3t, потрясающе и так прост. – oberger

0

У нас была аналогичная проблема, выше не работает для нас.

Нижеследующий, однако.

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 
+0

Это не отвечает на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав [Ask Question] (http://stackoverflow.com/questions/ask). Вы также можете [добавить щедрость] (http://stackoverflow.com/help/privileges/set-bounties), чтобы привлечь больше внимания к этому вопросу, как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/ Что-репутация). - [Из обзора] (/ review/low-quality-posts/13343062) –

+0

Вышеупомянутое очень важно ответить на вопрос о разборе строки как свойств. - Берет файл строк - Разобрать Это - Набор строки в свойствах объекта равно Groovy объектов, которые могут быть повторно использованы в любом месте трубопровода – user3265317

1

Я использую этот код для загрузки свойств из одного столбца DB

public Properties buildProperties(String propertiesFromString, String entrySeparator) throws IOException { 
    Properties properties = new Properties(); 
    properties.load(new StringReader(propertiesFromString.replaceAll(entrySeparator, "\n"))); 
    return properties; 
} 

с помощью простого теста

@Test 
public void testProperties() throws Exception { 
    Properties properties = buildProperties("A=1;B=2;Z=x",";"); 
    assertEquals("1", properties.getProperty("A"));   
    assertEquals("2", properties.getProperty("B"));   
    assertEquals("3", properties.getProperty("C","3"));   
    assertNull(properties.getProperty("Y")); 
    assertEquals("x", properties.getProperty("Z")); 
} 
Смежные вопросы