我正在从一个文件构建一个ResourceBundle,这个包含有<字符串,字符串>值。
InputStream in = getClass().getResourceAsStream("SQL.properties");
properties = new PropertyResourceBundle(in);
in.close();
我想在此捆绑包上添加/ 替换,使用-Dsome.option.val.NAME1 = HiEarth
从命令行传递一些属性我不关心转储旧捆绑包而是创建一个新捆绑包。
请你小费?
我认为我需要做的是:
答案 0 :(得分:1)
这可以完成您想要的一些操作(将System.properties转换为ResourceBundle)。更好的错误处理由您决定: - )
public static ResourceBundle createBundle() { final ResourceBundle bundle; final Properties properties; final CharArrayWriter charWriter; final PrintWriter printWriter; final CharArrayReader charReader; charWriter = new CharArrayWriter(); printWriter = new PrintWriter(charWriter); properties = System.getProperties(); properties.list(printWriter); charReader = new CharArrayReader(charWriter.toCharArray()); try { bundle = new PropertyResourceBundle(charReader); return (bundle); } catch(final IOException ex) { // cannot happen ex.printStackTrace(); } throw new Error(); }
答案 1 :(得分:0)
这可能不是最好的方法,但这是我能想到的最好的方法:实现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
}
}