我应该如何在Java中使用getResource()?

时间:2011-06-19 04:57:55

标签: java resources locate getresource

这个问题在很多地方被提出,有很多小的变化。 (例如Java - getClassLoader().getResource() driving me bonkers等。)我仍然无法使其发挥作用 这是一段代码:

        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的空值。

大多数其他帖子似乎都在处理getResourceAsStream()。我想我应该使用getResource()。 有所作为吗?

只是不能这么难。有线索吗?

2 个答案:

答案 0 :(得分:4)

String clipName = "Chook.wav";

使用getResource时,传入的字符串必须是绝对名称或相对于某个类有效。由于您使用的是ClassLoader.getResource()而不是Class.getResource(),因此它必须是绝对路径。

如果没有看到您的实际文件层次结构,我只能猜测“bin”是已编译类和资源的根,而“ibm1260”是该路径中的包/文件夹,并且“Chook.wav”存在于该路径中夹。如果是这种情况,那么您需要使用/ibm1260/Chook.wav(或者可能ibm1260/Chook.wav,我通常不使用类加载器进行资源查找)作为传递给{{的文件的名称1}}。

无论哪种方式,您都需要确保将文件复制到已编译代码的位置,并确保根文件夹位于类路径中。

答案 1 :(得分:4)

getResourcegetResourceAsStream方法用于访问类路径上的资源。您似乎试图访问一些不在类路径上的资源。

getResourcegetResourceAsStream用于定位资源的逻辑基本相同。方法之间的区别在于,一个返回一个URL,另一个返回InputStream


  

这不可能是这么难。有线索吗?

这根本不是那么难。您只需要了解类路径的工作方式......并确保使用的资源名称解析为您放置在类路径中的某个目录或JAR文件中的正确位置的资源。

或者,如果资源不是您应用程序的“一部分”,请不要以这种方式访问​​它。