我有一个使用java.util.Properties
类的应用程序将设置存储在文件中。
我这样加载文件:
props.load(new FileInputStream("c2c_stngs.prop"));
在IDE中一切正常,在构建并双击.jar文件后也可以正常工作。
当我尝试在命令行中运行它时,我的问题就出现了:
java -jar c:\Works\project.jar
它会抛出错误:
java.io.FileNotFoundException: c2c_stngs.prop (The system cannot find the file specified)
我将c2c_stngs.prop
文件放在与.jar文件相同的文件夹中。
此外,我尝试以管理员身份运行cmd
,但仍然相同。
答案 0 :(得分:3)
这是因为您通过路径访问jar。尝试将脚本更改为:
C:
CD \Works
java -jar project.jar
这应该有效,但不能解决您的问题。如果您希望属性文件始终位于jar文件的位置,则需要找到jar文件。请参阅Finding the path to a jar from a Class inside it?。
类似的东西:
File propertiesFile = new File("c2c_stngs.prop");
if ( !propertiesFile.exists() ) {
// Wont work 'cause getLocation returns a URL but you get my drift.
propertiesFile = new File(getLocation(this.class), propertiesFile);
}
答案 1 :(得分:2)
您正在使用相对路径来加载属性文件。这意味着代码期望属性文件位于启动程序的目录中。因此,如果您在启动c:\
时处于java
,则该文件必须位于c:\
中,而不是位于jar所在的目录中。
如果属性是read_only,则该文件应该在jar中,您应该使用Class.getResourceAsStream()
从类路径加载它。如果是读/写,请使用绝对路径加载文件。