包含美元分隔变量的Java属性

Mul*_*one 4 java ant variables properties dollar-sign

我将我的应用程序设置存储在我在Ant和Java应用程序中使用的属性文件中.也许这不是很好的实践,但我觉得避免重复是非常方便的.该文件包含以下变量:

usefulstuff.dir = ${user.home}/usefulstuff
Run Code Online (Sandbox Code Playgroud)

这样其他人就可以在*nix系统上运行程序,前提是他们的主目录中有有用的资料文件夹.

现在,令人着迷的是这个属性文件在Ant中工作正常(变量被解析为/home/username),而当我直接在Java应用程序中加载相同的文件时,我得到一个包含的字符串${user.home}/usefulstuff,这确实不是很有用.

我用Ant中的代码加载道具:

   <loadproperties srcFile="myProps.properties"/>
Run Code Online (Sandbox Code Playgroud)

在Java应用程序中:

    FileInputStream ins = new FileInputStream(propFilePath);
    myProps.load(ins);
    ins.close();
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?也许有更好的方法在Java应用程序中加载属性比load()

Jon*_*eet 6

我不认为这在Ant- Ant中的作用特别"引人入胜" 是故意编写的:

属性是键值对,Apache Ant尝试${key}在运行时扩展为值.

Ant提供对所有系统属性的访问,就像使用<property>任务定义它们一样.例如,$ {os.name}扩展为操作系统的名称.

如果您想要相同的行为,则需要实现相同的逻辑.您可以直接使用Ant中的类,如果他们按照您的意愿行事 - 如果您愿意发送相关的二进制文件(并遵守许可证).

否则,您可能希望使用正则表达式来查找所有匹配项 - 或者(可能更简单)迭代所有系统属性并对它们进行简单替换.