在Jar外部加载文件

时间:2014-07-07 13:08:47

标签: java

我有一个名为lib的文件夹,其中包含我的所有Jar文件,在一个Jar文件类中,我有一个由批处理文件调用的main方法。在与我的lib相同的文件夹位置,我有另一个文件夹结构路径/到/ a / resource / myresource.txt

如何从Jar文件中的类加载此文件?我尝试了以下操作,结果都是null:

getClass().getResource("path/to/a/resource/myresource.txt")
getClass().getClassLoader().getResource("path/to/a/resource/myresource.txt")

有什么想法吗?即使有绝对的路径,也失败了!有什么建议吗?

5 个答案:

答案 0 :(得分:1)

您可以使用:

getClass().getResourceAsStream("path/to/a/resource/myresource.txt")

但是,为了实现这一目标,您需要添加路径'。'到JAR的MANIFEST.MF文件的Class-Path条目。

http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

答案 1 :(得分:0)

您尝试过的两件事用于从类路径中读取文件,因为此文件夹不在您的类路径中,您可以使用任何java文件IO类直接读取它。

答案 2 :(得分:0)

File file = new File("C:/folder/myFile.txt");

或者如果你知道相对路径:

 File file = new File("../../path/myFile.txt");

答案 3 :(得分:0)

你的道路似乎不够准确。此外,这个问题以前已经有过了。

看看这里:

How to Load File Outside of, but Relative to, the JAR?

How to get the path of a running JAR file?

答案 4 :(得分:0)

您可以从文件系统加载文件

new FileReader(relativeOrAbsoluteFilesystemLocation)

或者您可以将相关目录添加到类路径中:

java -cp "lib/*;lib" ...

然后使用您的原始方法。

(Unix使用:而不是;作为类路径分隔符)