【问题标题】:Merge properties into a ResourceBundle from System.getProperties()从 System.getProperties() 将属性合并到 ResourceBundle
【发布时间】:2009-02-16 18:33:49
【问题描述】:

我正在从一个文件构建一个 ResourceBundle,这个包包含 值。

InputStream in = getClass().getResourceAsStream("SQL.properties");
properties = new PropertyResourceBundle(in);
in.close();

我想在这个捆绑包上添加/替换一些我使用 -Dsome.option.val.NAME1=HiEarth 从命令行传递的属性

我不在乎转储旧包并创建一个新包。

请给小费好吗?

我认为我需要做的是:

  1. 从包中创建一个 HashMap
  2. 替换值。
  3. 将 HashMap 转换为 InputStream。 //这是复杂的部分...
  4. 据此构建新的捆绑包。

【问题讨论】:

    标签: java properties parameters


    【解决方案1】:

    这可以做一些你想做的事情(将 System.properties 转换为 ResourceBundle)。更好的错误处理由您决定:-)

    公共静态资源包 createBundle() { 最终的 ResourceBundle 捆绑包; 最终属性属性; 最后的 CharArrayWriter charWriter; 最终的 PrintWriter printWriter; 最后的 CharArrayReader charReader; charWriter = new CharArrayWriter(); printWriter = new PrintWriter(charWriter); 属性 = System.getProperties(); properties.list(printWriter); charReader = new CharArrayReader(charWriter.toCharArray()); 尝试 { bundle = new PropertyResourceBundle(charReader); 返回(捆绑); } 捕获(最终 IOException 前) { // 不可能发生 ex.printStackTrace(); } 抛出新的错误(); }

    【讨论】:

    • +1。不过,我想补充一点警告。 Properties.list() 截断 值 > 40 个字符(请参阅错误报告:bugs.sun.com/bugdatabase/…)。考虑改用Properties.store()
    【解决方案2】:

    这可能不是最好的方法,但它是我能想到的最好的方法:实现一个 ResourceBundle 的子类来存储您要添加/替换的属性,然后将该捆绑包的父类设置为PropertyResourceBundle 你从输入流中加载。

    InputStream in = getClass().getResourceAsStream("SQL.properties");
    properties = new PropertyResourceBundle(in);
    in.close();
    MyCLIResourceBundle b = new MyCLIResourceBundle(properties);
    // use b as your bundle
    

    实现类似于

    public class MyCLIResourceBundle extends ResourceBundle {
        public MyCLIResourceBundle(ResourceBundle parent) {
            super();
            this.setParent(parent);
            // go on and load your chosen properties from System.getProperties() or wherever
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      相关资源
      最近更新 更多