我将我的应用程序设置存储在我在 Ant 和 Java 应用程序中使用的属性文件中。也许这不是很好的做法,但我发现避免重复非常方便。该文件包含变量,例如:
usefulstuff.dir = ${user.home}/usefulstuff
这样其他人就可以在 *nix 系统上运行该程序,前提是他们的主目录中有 usefulstuff 文件夹。
现在,令人着迷的是这个属性文件在 Ant 中工作正常(变量被解析为 /home/username
),而当我加载同一个文件时直接在 Java 应用程序中,我得到一个包含 ${user.home}/usefulstuff
的字符串,这确实不是很有用。
我在 Ant 中使用此代码加载 Prop :
<loadproperties srcFile="myProps.properties"/>
在 Java 应用程序中:
FileInputStream ins = new FileInputStream(propFilePath);
myProps.load(ins);
ins.close();
我错过了什么吗?也许有比 load()
更好的方法在 Java 应用程序中加载属性?
最佳答案
我不认为这在 Ant 中有效 - Ant is deliberately written to do so :
Properties are key-value-pairs where Apache Ant tries to expand
${key}
to value at runtime.
和
Ant provides access to all system properties as if they had been defined using a
<property>
task. For example, ${os.name} expands to the name of the operating system.
如果您想要相同的行为,则需要实现相同类型的逻辑。您可以直接使用 Ant 中的类,前提是它们可以满足您的需求 - 并且您愿意发布相关的二进制文件(并遵守许可证)。
否则,您可能希望使用正则表达式来查找所有匹配项 - 或者(可能更简单)遍历所有系统属性并对它们进行简单的替换。
关于包含美元分隔变量的 Java 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7772362/