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,请参见编辑我的答案,以了解差异的简要解释。