在jar中引用数据文件

时间:2010-09-29 02:55:26

标签: java classpath executable-jar

我的Java程序引用了很多数据文件。我将它们放在名为data /的顶级目录中,以及src /和bin /。在Eclipse中,对data /和../data/的引用似乎都有效。当我从命令行运行它时,只有../data/工作。

当我将bin /和data /目录放在jar中并正确设置入口点时,它似乎不知道我希望它访问里面的数据/目录 jar 。我能够让它工作的唯一方法是将引用设置为../data/并将jar放在bin目录中。这显然对我没有任何好处,因为它不是独立的。

我需要对引用做些什么才能使它们起作用?

由于

3 个答案:

答案 0 :(得分:3)

我建议您以类路径相对的方式访问文件,无论是在Eclipse中还是在编译的JAR中。

有几种方法可以解决它,但基本的JDK方法是使用Class的getResourceAsStream()方法,使您可以访问可以读入的InputStream对象。

答案 1 :(得分:1)

如果您的资源位于jar文件中,请考虑使用此方法来阅读它们:

class Class {
    InputStream getResourceAsStream(String name)
}

这会查找相对于类(可能在jar中)的资源,而不是相对于工作目录。

答案 2 :(得分:-1)

谢谢你指点我这条道路,伙计们。我最终做了一个非常糟糕的解决方法,因为我对IO不是很好。我使用getClass()来构造一个URL:

http://forums.sun.com/thread.jspa?threadID=5258488

然后从这个字符串(新文件(文件))中创建一个新的File对象:

String file = url.toString()。replaceFirst(“file:”,“”);

这使我能够保留引用文件对象的相同代码。