Java 如何访问运行jar上方的文件夹

Java 如何访问运行jar上方的文件夹,java,image,file,cross-platform,relative-path,Java,Image,File,Cross Platform,Relative Path,背景: 我在Windows上的C:\Program Files\folder\Files\bin\main.jar位置有一个名为main.jar的正在运行的.jar。我在同一位置还有一个名为p.properties的属性文件。同时,我在C:\ProgramFiles\folder\Files\graphic\img.png上有一个.png文件 我的问题: 与访问img.png文件相比,如何从.jar访问p.properties文件。我相信我可以使用新文件(“p.properties”)来自.ja

背景: 我在Windows上的
C:\Program Files\folder\Files\bin\main.jar
位置有一个名为
main.jar
的正在运行的.jar。我在同一位置还有一个名为
p.properties
的属性文件。同时,我在
C:\ProgramFiles\folder\Files\graphic\img.png
上有一个.png文件

我的问题: 与访问img.png文件相比,如何从.jar访问p.properties文件。我相信我可以使用
新文件(“p.properties”)来自.jar,但是如何访问img文件?它在另一个文件夹中,我尝试了
新文件(“graphic/img.png”)但那不起作用。我该怎么做?我访问属性文件是否正确?

提前感谢

在相对路径中,
引用父目录。比如说,

new File("../graphic/img.png");
顺便说一下,这些路径是相对于程序的当前工作目录的,它可能不是.jar文件所在的路径。要查找jar所在的路径,可以使用:

File jarFilePath = getClass().getProtectionDomain()
                             .getCodeSource().getLocation().getPath()

您在试图访问文件的类中使用的包名是什么?如果您没有任何包(因此它是默认包),那么您将使用
新文件(“../graphic/img.png”)访问
.png
文件
。这是一个坏主意。如果需要与代码相关的数据,请将数据放入jar中,然后使用Class.getResourceAsStream引用它。是的,但与Windows上的警告相同:程序必须以
bin
作为其工作目录启动。搜索与.jar所在位置相关的文件会更安全。