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

标签 java variables ant properties dollar-sign

我将我的应用程序设置存储在我在 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/

相关文章:

rest - golang gin-gonic 和包中的拆分文件

java - FindBugs 报告空指针取消引用

java - 在 shell 脚本中调用连续的 java 任务

ant - 有没有更简单的方法来部署到WebSphere?

java - 如何在 ITEXT PDF java 中添加登录行?

java - 使用 LayoutClickListener 终止替换组件

Java 递增/递减运算符 - 它们的行为方式是什么,功能是什么?

java - 调用另一种方法来获取结果集并正确关闭连接?

ios - iOS环境变量在哪里设置?

ios - 如何在 Swift 中声明全局变量?