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

Java 如何使用相对路径读取可执行jar外部的文本文件,java,executable,relative-path,executable-jar,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

我有一个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\u Nandan/ProjectName/bin/

所以,我用了一个密码

contents = new String(Files.readAllBytes(Paths.get("../ProjectName/text/Requests.txt")));
使用相对路径。/ProjectName/text/Requests.txt,如上所述。 它工作正常,当我运行它时,它正在读取文本文件

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

抛出java.nio.file.NoSuchFileException

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


请帮忙。提前感谢。

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

如果将可执行jar放在bin目录中,那么基本目录就是jar文件所在的目录,使用的相对路径应该是../text/Requests.txt


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

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

如果将可执行jar放在bin目录中,那么基本目录就是jar文件所在的目录,使用的相对路径应该是../text/Requests.txt


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

这取决于您当前的工作目录。如果您在Workspace/ProjectName下以java-jar-bin/“yourjarname.jar”的形式执行jar,那么获取所需文件的路径应该是“text/Requests.txt”。您的IDE在Workspace/ProjectName下工作,这是您在java中执行时的当前目录。

这取决于您当前的工作目录。如果您在Workspace/ProjectName下以java-jar-bin/“yourjarname.jar”的形式执行jar,那么获取所需文件的路径应该是“text/Requests.txt”。您的IDE正在Workspace/ProjectName下工作,这是您在java中执行时的当前目录。

请尝试../text/Requests.txt-您不需要额外的目录ProjectName@BrianPipa谢谢你的帮助。但是试过了,没用!您将jar文件放在bin文件夹中,将Requests.txt放在ProjectName文件夹中?你不应该把Requests.txt文件放在文本文件夹中吗?@Joe my bad,我已经把Requests.txt放在ProjectName/text文件夹中了。问题已相应更新。请尝试../text/Requests.txt-您不需要额外的问题ProjectName@BrianPipa谢谢你的帮助。但是试过了,没用!您将jar文件放在bin文件夹中,将Requests.txt放在ProjectName文件夹中?你不应该把Requests.txt文件放在文本文件夹中吗?@Joe my bad,我已经把Requests.txt放在ProjectName/text文件夹中了。问题已相应更新。