我创建了一个 Java 程序来比较在版本管理工具中保存为文件的脚本与在我们的数据库中加载的脚本。这是一个简单的程序,从头到尾运行并在发现差异时输出到控制台。现在我想从 .properties 文件加载数据库 URL、用户名和密码以及我的文件的位置。
我确实假设如果我将文件放在类路径中,它将从我的 Java 程序中可见:
Properties values = new Properties();
try
{
File checkPackages = new File("myfile.properties");
if(!checkPackages.exists()) throw new FileNotFoundException();
values.load(new FileReader(checkPackages));
}
catch(FileNotFoundException fnfe) {}
我还想将整个程序保存到一个 .jar 文件中,这样它就更有用了。不幸的是,我发现引用 .properties 文件的唯一方法是将它放在我运行 java.exe 的目录中。 PATH 或 CLASSPATH 似乎不适用??
我找到了 an Oracle site about the .jar file's Manifest file正如我希望那里有答案一样,但是 Class-path: list 中的元素似乎只引用不在 .jar 中的 .jar 文件(而不是 .properties 文件!) 问题: 有什么方法可以将 .properties 文件包装到 .jar 文件中,这样我的用户就不必知道它在那里了吗? 有什么方法可以将 Oracle 驱动程序 .jar 包装到应用程序的 .jar 中,这样我的用户就不必知道它在那里(Oracle 说这需要“自定义代码”)?
TIA
最佳答案
您可以使用 ClassLoader#getResource()
获取类路径中的资源(即使密封在 JAR 中)和 ClassLoader#getResourceAsStream()
方法。
例如:
Properties values = new Properties();
values.load(ThisClass.class.getClassLoader().getResourceAsStream("myproject.properties"));
// umm, don't forget to close the stream, this code is just an example usage
请注意,将用户名和密码存储到程序中的任何数据库中is considered a heavy security risk .
关于java - 从 Java 控制台程序使用 .properties 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873455/