Java 将字符串解析为属性

Java 将字符串解析为属性,java,Java,我正在从数据库中读取属性文件。 我检查了java.util.Properties,没有从String实例解析的方法。有什么办法吗?你说得对,java.util.Properties没有从字符串读取的方法,但实际上它有更通用的方法,可以从输入流或读取器读取 因此,如果您可以通过某种方式将字符串表示为其中一种,即有效地逐个迭代字符的源,则可以调用load。这让人觉得它应该存在,事实上它确实存在 因此,将其组合起来非常简单: public Properties parsePropertiesStrin

我正在从数据库中读取属性文件。
我检查了
java.util.Properties
,没有从
String
实例解析的方法。有什么办法吗?

你说得对,
java.util.Properties
没有从
字符串
读取的方法,但实际上它有更通用的方法,可以从
输入流
读取器
读取

因此,如果您可以通过某种方式将
字符串
表示为其中一种,即有效地逐个迭代字符的源,则可以调用
load
。这让人觉得它应该存在,事实上它确实存在

因此,将其组合起来非常简单:

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;
}

我们有一个类似的问题,上面没有为我们工作

然而,下面的例子确实如此

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

我使用此代码从单个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"));  
}

这两种实用程序方法可以通过对象写入和读取
String

我发现上述两种方法在有大量属性时非常有用 您希望将它们全部保存在
存储或数据库中
,而不希望创建一个巨大的
键值
存储表


属性文件的格式是什么?一个属性文件或数据库中的属性??谢谢你,andrzej,这帮了我几个小时尝试使用jets3t动态转换和Amazon S3道具文件,棒极了,非常简单。我感觉“grr”非常强烈。Java核心库和API感觉是针对最大样板文件进行了优化。这并没有真正回答这个问题。如果您有不同的问题,可以单击以提问。一旦你有足够的时间,你也可以吸引更多的注意力以上确实回答了将字符串解析为属性的问题我们在Properties对象中获取一个字符串文件-解析它-设置字符串,这些字符串与groovy对象相等,可以在管道中的任何位置重用
/**
 * Converts a {@link Properties} object to {@link String} and you can
 * also provide a description for the output.
 *
 * @param props an input {@link Properties} to be converted to {@link String}
 * @param desc  an input description for the output
 * @return an output String that could easily parse back to {@link Properties} object
 * @throws IOException If writing encounter a problem or if an I/O error occurs.
 */
private static String convert2String(final Properties props, String desc) throws IOException {
    final StringWriter sw = new StringWriter();
    String propStr;
    try {
        props.store(sw, desc);
        propStr = sw.toString();
    } finally {
        if (sw != null) {
            sw.close();
        }
    }

    return propStr;
}


/**
 * Converts {@link String} to {@link Properties}
 * @param propsStr an {@link String} input that is saved via convert2String method
 * @return a {@link Properties} object
 * @throws IOException if an error occurred when reading from the {@link StringReader}
 */
private static Properties convert2Properties(final String propsStr) throws IOException {
    final Properties props = new Properties();
    final StringReader sr = new StringReader(propsStr);
    try {
        props.load(sr);
    } finally {
        if (sr != null)
            sr.close();
    }

    return props;
}