getResource将始终返回null

时间:2013-08-13 09:32:14

标签: java

这让我发疯了。我有一个简单的eclipse项目,其中包含一个src文件夹和一个类。但我似乎无法让getResource找到它。我做错了什么?

import java.net.URL;

public class ContextTest {

    public static void main(String[] args) {
        URL url = ContextTest.class.getResource("/src/ContextTest.java");
        System.out.println(url);
    }
}

如果我右键单击类名,则路径为/TestsProject/src/ContextTest.java,并且根据“运行配置”中的“类路径”选项卡的默认类路径为TestProject

它不适用于/bin/ContextTest.java/ContextTest.javaContextTest.java

2 个答案:

答案 0 :(得分:3)

使用ContextTest.class.getResource("/....")加载资源时,前导/会被转换为绝对路径。绝对意味着来自 root package (即默认包)。

在Eclipse中,根包被认为是src文件夹下的根包。您编译的类将放在bin文件夹下,如果您创建了一个jar,您将看到您的根软件包不是srcbin文件夹,而是其中的文件夹。 (例如com)。

因此,使用类绝对路径加载资源的正确方法是ContextTest.class.getResource("/ContextTest.java");。如果文件ContextTest.java位于的根包中,无论您的编译类是,那么它将被找到并返回。

我希望这可以清除图片。

更新:根据以下评论,您不清楚自己要做什么。当您使用getResource() 时,您没有加载文件,而是来自类路径的资源。即使您的文件位于jar文件中,这也可以正确找到资源。因此,对于上面的示例来说,您尝试作为资源加载的文件应该在类路径中(即在bin文件夹下,因为这是从Eclipse内部执行时类路径的根目录)。如果您尝试在类路径之外加载文件,请不要尝试加载资源,而是可以使用File

答案 1 :(得分:0)

通过getResource()访问的资源必须位于类路径中。您的Java文件将被编译并放置在类路径中。已编译的.java文件的扩展名为.class

尝试

 URL url = ContextTest.class.getResource("ContextTest.class");
相关问题