2011-12-17 40 views
1

我有一个使用java.util.Properties类的应用程序将设置存储在文件中。 我加载该文件是这样的:在命令行上运行.jar时无法访问

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

属性意味着保持不变,还是可以由用户(或应用程序)编辑?另见[这个答案](http://stackoverflow.com/questions/5052311/how-can-a-java-program-use-files-inside-the-jar-for-read-and-write/5052359#5052359 )为更好的策略编辑属性。 – 2011-12-17 13:02:11

回答

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); 
} 
+0

谢谢,就是这样,简单!你不相信,我开始寻找注册表,看看是否有任何额外的参数,通过双击.jar;) – 2011-12-17 13:32:49

2

您使用相对路径来加载属性文件。这意味着代码需要将属性文件放在启动程序的目录中。因此,如果您在c:\启动java时,该文件必须在c:\中,而不是在jar所在的目录中。

如果属性是read_only,则文件应该放在jar文件中,并且应该使用Class.getResourceAsStream()从类路径加载它。如果它是读取/写入,请使用绝对路径加载文件。

+0

谢谢,我已经想过,但我需要写的很好。我的部署脚本是将jar复制到某个目录,所以我只是对路径进行了硬编码。 – 2011-12-17 13:35:35