在命令行上运行.jar时无法访问

时间:2011-12-17 12:58:48

标签: java

我有一个使用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,但仍然相同。

2 个答案:

答案 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()从类路径加载它。如果是读/写,请使用绝对路径加载文件。