这让我发疯了。我有一个简单的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.java
,ContextTest.java
。
答案 0 :(得分:3)
使用ContextTest.class.getResource("/....")
加载资源时,前导/
会被转换为绝对路径。绝对意味着来自 root package (即默认包)。
在Eclipse中,根包被认为是src
文件夹下的根包。您编译的类将放在bin
文件夹下,如果您创建了一个jar,您将看到您的根软件包不是src
或bin
文件夹,而是其中的文件夹。 (例如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");