如何在Install4j中读取Properties文件?Map变量使用及优化方法咨询
Install4j读取Properties文件的变量处理问题
我的Properties文件内容如下:
version.major=2 version.minor=1 version.revision=3
我尝试用Install4j的「读取属性文件」动作读取这三个版本信息,该动作的变量说明为:
将设置为
java.util.Map实例的变量名称。
但Install4j的变量类型选项里并没有「Map」类型,我想知道是不是必须声明「字符串数组」类型变量,遍历后拆分出三个独立变量?或者有没有办法直接把读取后的内容当作Map使用,不用这类辅助变量就能按需查找键值对?感觉自己可能漏了关键要点。
我目前的做法是把属性读取到名为BUILD的字符串数组中,再用以下脚本设置major变量(minor和revision的设置逻辑和这个完全重复):
final String key = "version.major"; String[] arr = (String[])context.getVariable("BUILD"); for (int i = 0; i < arr.length; i++) { if (arr[i].startsWith(key)) { return arr[i].substring(arr[i].indexOf('=') + 1).trim(); } } return null;
解决方案
完全不用绕弯子用字符串数组处理——Install4j的变量系统其实支持存储任意Java对象,只是在变量类型选择界面没把Map列出来而已,直接用Map才是这个动作的设计初衷。
正确操作步骤:
- 在「读取属性文件」动作中,直接设置变量名(比如
versionProps),无需提前声明变量类型,运行该动作后,它会自动将java.util.Map实例存入这个变量。 - 在需要获取版本值的地方(比如设置变量的脚本动作),直接把变量当作Map读取:
// 获取major版本号 Map<String, String> props = (Map<String, String>)context.getVariable("versionProps"); return props.get("version.major"); - 同理,
minor和revision版本号直接用props.get("version.minor")、props.get("version.revision")即可获取,不用重复写遍历逻辑。
关于当前方法的说明
你的现有写法能运行,是因为Install4j的「读取属性文件」动作有兼容逻辑:如果发现你指定的变量是字符串数组类型,会自动把Properties的每一行转成数组元素存入。但这属于冗余操作,完全没必要这么用。
内容的提问来源于stack exchange,提问作者user2947084
相关产品推荐
相关产品推荐

