我正在读取Java中的属性文件。用实际值替换字符串中的shell环境变量
Properties myProp = new Properties();
InputStream in = new FileInputStream(pathOfPropertyFile);
myProp.load(in);
in.close();
在属性文件中的值都对Linux shell变量的引用。 例如,在属性文件中的条目可能看起来像:
DATA_PATH=/data/${PROJECT}/${YEAR}${MONTH}${DAY}
我要执行从Java中的shell脚本,所以我有的ProcessBuilder实例,也是环境变量(envMap
为如下):
List<String> command = new ArrayList<String>();
command.add(actualCommand);
command.add(param1);
command.add(param2);
ProcessBuilder processBuilder = new ProcessBuilder(command);
Map<String, String> envMap = processBuilder.environment();
的envMap
具有环境变量我和一百多个(> 100)其他环境变量,我不需要一起要求。
我想用属性值字符串"/home/${USER}/${PROJECT}/data"
替换${USER}
,${PROJECT}
等等与shell的实际值。
我会考虑迭代Map作为最后一个选项(因为Map有100到200个元素迭代),因为它不是一个有效的方法。
请指教一下从字符串中获取由大括号括起来的环境变量的方法,这样我就可以直接使用map的get()和replace。或者,更好的方法是最受欢迎的。
注意:提供的参考文献(Replace String values with value in Hash Map,使我的问题看起来重复)不是最适合我的情况。
您的列表添加到自己'command.add(命令);'?你试图用'envMap'中的值替换'myProp'中的变量名? – SubOptimal
@SubOptimal谢谢你指出错字错误,我纠正它。考虑到Map中元素的数量(100到200之间),迭代Map元素并不是一个好主意。 – Marco99
您是否正在寻找从'“$ {USER}”'获取''USER'''的方法?我不确定你的问题到底是什么。为什么你需要迭代地图? – Marvin