2015-10-22 41 views
0

我正在开发一个应用程序,我必须指定一个名为dao.properties的文件的路径,它工作得很好,但是当我使用cmd执行jar时:java -jar StockManagement。 jar我得到的错误,该文件没有找到(它在netbeans中工作正常) 类和文件在同一个文件夹中。 我已经尝试了很多相对路径并没有什么作品,所以这是我最后的希望 这里是代码和层次结构:相对路径在执行jar时不起作用

Hierarchy

​​

感谢Ÿ提前

+0

http://stackoverflow.com/a/7098501/1352766这应该为您提供一些有关您的问题的信息。 – morganw09dev

+0

你能还张贴您正在使用,以试图加载文件中的代码片段? – morganw09dev

+0

我可以在评论中做到吗? – Sara

回答

0

如果我没有弄错,你使用ClassLoader的方式是寻找一个相对于被调用的文件路径。

从图中看来,您使用的是DAOFactory类中的ClassLoader,对吗?你声明的路径,你的文件是

stock/DAO/dao.properties 

如果你从DAOFactory调用它时,Java在文件中

<where DAOFactory is>/stock/DAO/dao.properties 

如果DAOFactory和dao.properties驻留在同文件我想你的文件路径应该只是

dao.properties 

因此,它看起来在DAOFactory是在同一个文件夹中。

编辑:使用DAOFactory类读取属性文件。

使用类似下面的代码片段中,从仅使用的主要方法试试,看看您是否可以读取属性文件,而无需任何其他的DAOFactory类调用这个函数。更改您需要在本地机器上工作的任何类或名称。

public static String getProperty(String property) { 
    String value = ""; 

    try (InputStream is = DAOFactory.class.getResourceAsStream("dao.properties")) { 
    Properties prop = new Properties(); 

    prop.load(is); 
    value = prop.getProperty(property); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 

    return value; 
} 
+0

嗨,摩根感谢您的回答 它们位于相同的文件夹中,并且我在发布之前试过这个,它没有工作 – Sara

+0

在某些时候,我看到你正在使用线程来尝试读取你的属性文件。如果使用DAOFactory类而不是线程怎么办?看看编辑的答案以上? – morganw09dev

+0

这就是我做Morgan的时候,我用DAOFactory代替线程 作为F illippo suggedted 您的评论也帮了我很多,我了解了一些模糊的东西,非常感谢你 – Sara

1

如果你的文件在你的代码库中,你应该使用classLoader来加载它。

+0

谢谢菲利波为你的答案 这正是我在做 – Sara

+0

这通常适用于我this.getClass()。getClassLoader()。getResourceAsStream(path_relative) –

+0

这是我做的我是新的在这里我不能添加在此评论的图像,我将在后 – Sara

相关问题