Java 给出一个相对路径,这样当我在任何机器上运行jar文件时声音都能正常工作

Java 给出一个相对路径,这样当我在任何机器上运行jar文件时声音都能正常工作,java,Java,在快照中显示的实用程序包中,有一个类常量。在与实用程序相同的目录中,有一个名为声音的文件夹,也显示在快照中。到目前为止,我一直在给出.wav文件的完整路径 像W:/UnderTest/Blaah/blaaaah/Foo/sounds/file.wav 我应该如何给出路径,这样当我为它创建一个.jar文件时,声音仍然可以工作。我试过这个: ../sounds/Player_1.wav 但是它不工作,我得到java.io.FileNotFoundException:..\sounds\Player

在快照中显示的
实用程序
包中,有一个类
常量
。在与
实用程序
相同的目录中,有一个名为
声音
文件夹
,也显示在快照中。到目前为止,我一直在给出
.wav
文件的完整路径

像W:/UnderTest/Blaah/blaaaah/Foo/sounds/file.wav

我应该如何给出路径,这样当我为它创建一个
.jar
文件时,声音仍然可以工作。我试过这个:

../sounds/Player_1.wav
但是它不工作,我得到
java.io.FileNotFoundException:..\sounds\Player_1.wav(系统找不到指定的路径)

试试这个

URL url = Constants.class.getResource("/sounds/file.wav");

现在获取文件路径的url…

在这种情况下,最好相对于根类路径加载资源:

URL soundURL = Thread.currentThread().getContextClassLoader()
        .getResource("/sounds/file.wav");
您还可以将资源作为流获取:

InputStream soundURLStream = Thread.currentThread().getContextClassLoader()
        .getResourceAsStream("/sounds/file.wav");

这与
Class.getResource
之间的主要区别在于
Class.getResource
假定提供的路径相对于类层次结构中的位置。因此,给定相对路径“/sounds/file.wav”,从类
utility.Constants
调用
getResource
,将尝试从包
utility.sounds
解析
file.wav
资源。而使用类加载器和相同的相对路径,资源将从
声音中解析。一个微妙但重要的区别。

它告诉我:
文件:/W:/UnderTest/NetbeansCurrent/tic tac toe/build/classes/sounds/Player_1.wav
这是唯一的方法吗?我必须编辑字符串以删除
文件:/
URL=pdftopng.class.getResource(“/sounds/file.wav”);字符串pth=url.getPath().substring(1);系统输出打印项次(pth);你试过这个:“/sounds/Player_1.wav”吗?它和@NidhishKrishnan答案有什么不同?我的意思是它们都安全吗?嘿@saplingPro,请参见编辑我的答案,以了解差异的简要解释。