3

这真让我抓狂。我有一个简单的 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

4

2 回答 2

3

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

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

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

我希望这可以清除图片。

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

于 2013-08-13T09:52:06.873 回答
0

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

尝试

 URL url = ContextTest.class.getResource("ContextTest.class");
于 2013-08-13T09:35:37.337 回答