使用Java控制台程序中的.properties文件

使用Java控制台程序中的.properties文件,java,properties,jar,Java,Properties,Jar,我创建了一个Java程序,将版本管理工具中保存为文件的脚本与数据库中加载的脚本进行比较。这是一个简单的程序,从开始运行到结束,并在发现差异时输出到控制台。现在我想从.properties文件加载数据库URL、用户名和密码以及文件的位置 我确实假设,如果我将文件放在类路径上,它将从我的Java程序中可见: Properties values = new Properties(); try { File checkPackages = new File("myfile.properties"

我创建了一个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的目录中。路径或类路径似乎不适用

我发现,正如我所希望的那样,这里有一个答案,但是清单中的Class path:元素似乎只引用了不在.jar中的.jar文件(而不是在.jar中的.properties文件!) 问题: 有没有办法将.properties文件包装到.jar文件中,这样我的用户就不必知道它在那里? 有没有办法将Oracle驱动程序.jar包装到应用程序的.jar中,这样我的用户就不必知道它在那里(Oracle说这需要“自定义代码”)


TIA

好吧,我建议对敏感数据(本例中的用户名、密码、url)进行加密,而不是隐藏它。毕竟,解压缩任何jar文件(本质上是zip格式)并跟踪
.properties
文件并不难,方法之一是使用-D开关在java命令行上定义系统属性。该系统属性可能包含属性文件的路径

例如

java-cp-Dmyproject.properties=/path/to/my.app.properties my.package.App

获取代码中的属性,如下所述:

String propPath = System.getProperty( "myproject.properties" );

final Properties myProps;

final FileInputStream in = new FileInputStream( propPath );

 try
 {
     myProps = Properties.load( in );
 }
 finally
 {
     in.close( );
 }

您可以使用和方法获取类路径中的资源(即使密封在JAR中)

例如:

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


请注意,将用户名和密码存储到程序中的任何数据库。

这正是我在.properties文件中寻找的内容。谢谢还有一些关于动态加载.jar的文章。不过,他们似乎都同意,很难做到正确,最好还是用通常的方式来做。