如何使用相对路径读取可执行jar外的文本文件

时间:2017-03-15 13:37:53

标签: java executable relative-path executable-jar

我有一个java项目结构,在eclipse中构建如下

--Workspace/ProjectName/bin(Where .class files exist)
                       |
                       /src(where source files i.e, java files exist)
                       |
                       /text(where a .txt file named Requests.txt present)
                       |                      
                       /common.properties(A property file)

当我使用

检查当前位置时
URL location = FileToString.class.getProtectionDomain().getCodeSource().getLocation();

将o / p作为文件:/ D:/ Workspace_Nandan / ProjectName / bin /

所以,我使用了代码

contents = new String(Files.readAllBytes(Paths.get("../ProjectName/text/Requests.txt")));

如上所述,具有相对路径 ../ ProjectName / text / Requests.txt 。 它的工作正常,它在我运行时读取文本文件。

但是当我将项目转换为代码中具有相同相对路径的可执行jar并将其放在同一 bin 文件夹中并且 Requests.txt 内部<时,同样的事情strong> ProjectName / text 文件夹,它无法访问提到的文本文件。

抛出 java.nio.file.NoSuchFileException

我是否应该在可执行jar的相对路径中进行任何更改? 我在stackoverflow中尝试了很多解决方案,但没有发现它对我的问题很有用/适合。

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:2)

这取决于您当前的工作目录。如果您在Workspace / ProjectName下执行jar作为java -jar bin /&#34; yourjarname&#34; .jar获取所需文件的路径应为&#34; text / Requests.txt&#34;。您的IDE在Workspace / ProjectName下工作,当您从那里执行时,它是您在Java中的当前目录。

答案 1 :(得分:1)

当您通过Eclipse运行代码时,计算出相对路径的基本目录是项目文件夹ProjectName。所以,如果您的基目录是ProjectName并在../ProjectName/text/Requests.txt中查找文本文件,您将找到它!

如果将可执行jar放在bin目录中,则基本目录是jar文件所在的目录,并且您使用的相对路径应为../ text / Requests.txt

我建议您更改“text / Requests.txt”的相对路径,并将jar文件移动到ProjectName目录。