我有一个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中尝试了很多解决方案,但没有发现它对我的问题很有用/适合。
请帮忙。提前谢谢。
答案 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目录。