【问题标题】:Can I reference another property in a properties file (use ${property}) [duplicate]我可以在属性文件中引用另一个属性吗(使用 ${property})[重复]
【发布时间】:2010-11-27 13:58:01
【问题描述】:

可能重复:
How to reference another property in java.util.Properties?

看看我的“file.properties”:

key1= My name is
key2= ${key1} Martin !

为什么当我得到“key2”的值时,我的结果是“${key1} Martin !”不像“我叫马丁!”

=> 我用 Java 6 编程
=> 我使用 java.util.Properties

【问题讨论】:

    标签: java properties parameters include


    【解决方案1】:

    您可能需要查看 Apache 配置,

    http://commons.apache.org/configuration/

    它支持的众多功能包括Variable Interpolation

    【讨论】:

    • 就是这样!名称=马丁 myKey=hi ${name} !字符串结果 = new PropertiesConfiguration("myFile.properties").getString("myKey"); ====> "result" 的值是 "hi Martin !"
    【解决方案2】:

    使用 Java Properties class 是不可能的。

    属性键和值只是字符串。它们不会发生任何处理,因此您不能在值中引用另一个值。

    【讨论】:

    • 很奇怪。使用 ANT,您可以做到这一点。 Java 怎么了?
    • ANT 与 Java 属性无关。我对 ANT 底层内容的(有限)理解是它已被解析。 Java 属性文件只是包含可以加载到内存中的字符串键和字符串值的文本文件。
    • 自从我查看源代码以来已经有一段时间了,但我认为 ant 使用 org.apache.commons.configuration 进行属性解析。不要引用我的话。
    • “Java 怎么了?”我想你的意思是 java.util.Properties 是怎么回事,答案是它不做属性扩展,也没有声称。
    • 似乎应该如此。但听起来像使用 ANT 之类的 Apache 配置会更好。
    【解决方案3】:

    Ant 文件是脚本;属性文件是字符串的桶。

    属性文件的主要目的是充当可翻译文本的字符串容器。资源包中通常使用的格式字符串使用基于索引的系统。当字符串被翻译时,参数的顺序可以在字符串的翻译版本中改变,而不需要改变Java代码。

    String what = "Hello";
    String who = "Martin";
    System.out.println(MessageFormat.format("{0}, {1}!", what, who));
    System.out.println(MessageFormat.format("{1}, {0}!", what, who));
    

    输出:

    Hello, Martin!
    Martin, Hello!
    

    对于这样的用例,将功能封装在 Properties 类中是没有意义的,因为字符串通常需要来自应用程序的数据。 MessageFormat 类可用于执行替换。

    这种格式不应与Formatter指定的其他格式选项混淆:

    System.out.format("%s, %s!%n", what, who);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多