我应该如何在Java中使用getResource()?
这个问题在很多地方被提出,有很多小的变化。 (比如Java – getClassLoader()。getResource()驱使我疯狂 。)我仍然无法使它工作。
这是一段代码:
String clipName = "Chook.wav"; ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); // URL url = classLoader.getResource(clipName); URL url = new URL("file:///Users/chap/Documents/workspace/the1620/bin/ibm1620/" + clipName); ais = AudioSystem.getAudioInputStream(url);
这是有效的 – 请注意,我已经硬编码了包含剪辑文件的目录的路径,该文件位于那里,并且与我的.class文件位于同一目录中。 唉,注释掉的代码只返回url的空值。
大多数其他post似乎都处理getResourceAsStream()。 我想我应该使用getResource()。 这有什么不同吗?
这不可能是这么难。 有什么线索吗?
String clipName = "Chook.wav";
使用getResource
,传入的字符串必须是绝对名称或相对于某个类有效。 由于您使用的是ClassLoader.getResource()
而不是Class.getResource()
,因此它必须是绝对路径。
在没有看到您的实际文件层次结构的情况下,我只能猜测“bin”是已编译类和资源的根,而“ibm1260”是该路径中的包/文件夹,并且该文件夹中存在“Chook.wav”。 如果是这种情况,那么您需要使用/ibm1260/Chook.wav
(或者可能是ibm1260/Chook.wav
,我通常不使用类加载器进行资源查找)作为传递给getResource()
的文件的名称getResource()
。
无论哪种方式,您都需要确保将文件复制到已编译代码的位置,并确保根文件夹位于类路径中。
getResource
和getResourceAsStream
方法用于访问类路径上的资源。 您似乎正在尝试访问不在类路径上的某些资源。
getResource
和getResourceAsStream
用于定位资源的逻辑基本相同。 方法之间的区别在于,一个返回一个URL,另一个返回一个InputStream
。
这不可能是这么难。 有什么线索吗?
这根本不是那么难。 您只需要了解类路径的工作方式……并确保使用的资源名称解析为您放置在类路径中的某个目录或JAR文件中的正确位置的资源。
或者,如果资源不是您应用程序的“一部分”,请不要以这种方式访问它。