2011-09-29 74 views
6

我正在尝试使用Class.getResource("rsc/my_resource_file.txt")在Eclipse应用程序中加载文件。但是,不管我在Eclipse做classpath中始终只包含一个条目到Eclipse启动:Class.getResource()在我的Eclipse应用程序中返回null?无法配置类路径?

... /日蚀/插件/ org.eclipse.equinox.launcher_1.2.0.v20110502.pkc

如何配置类路径?

注:在运行时,我确定类路径下面的代码:

URLClassLoader cl = (URLClassLoader) ClassLoader.getSystemClassLoader(); 
for (URL classpathURL : cl.getURLs()) { 
    System.out.println(classpathURL); 
} 

编辑:进一步信息。

问题的根源在于Class.getResource("rsc/my_resource_file.txt")返回null。在一个简单的5行“Java应用程序”中完成了一些小实验之后,我想我已经弄明白了,并且问题与类路径有关。显然,类路径与“Eclipse应用程序”有些不同。我通过做Class.getResource("/rsc/my_resource_file.txt")解决了问题,谢谢BalusC。

+1

您可以退后一步吗?你的具体问题是资源返回'null',对吧?你确定它的道路是正确的吗?正如你所看到的,它与当前类的包相关。不应该以'/'开始的路径是相对于包根?至少,Eclipse启动程序不是在这里责怪。 – BalusC

+0

@ BalusC - 你是对的,我曾认为/将是文件系统上的绝对路径。如果您将此作为答案,我会接受它。 – Buttons840

+0

我发布了一个答案。 Classpath不得与本地磁盘文件系统混淆。 – BalusC

回答

8

请退后一步。您的具体问题是资源返回null,对不对?你确定它的道路是正确的吗?正如你所看到的,它与当前类的包相关。不应该以/开头的路径相对于软件包根目录?

URL resource = getClass().getResource("/rsc/my_resource_file.txt"); 
// ... 

或者,您也可以使用上下文类加载器,它总是相对于类路径(包)根:

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
URL resource = loader.getResource("rsc/my_resource_file.txt"); 
// ... 

至少,Eclipse启动程序是不是在这里指责。

3

右键单击该项目并按照属性。

+0

我有同样的问题,这是因为我包含了类路径中的根目录 –

3

将文件放在源代码树的顶层目录中。这通常被称为“src”。 然后,当你建立你的项目时,文件将被复制到你的课程目录中(名称不同)。最后,构建文件将在您的类路径中(在eclipse环境中)。

Class someClassObject = BlammyClassName.class; 
someClassObject.getResource("my_resource_file.txt"); 

将返回一个URL到您的资源。

someClassObject.getResourceAsStream("my_resource_file.txt"); 

将返回一个流。

编辑:更改,使它不会静态引用类方法。

+0

这些方法不是'static',即使那样,它也不会解决OP使用依赖于上下文的相对路径的具体问题 – BalusC

+0

我发现这在早期测试中是一个有效的解决方法,但我不应该将资源文件放在我的src文件夹中,而是将资源文件夹/文件到构建路径。 – Buttons840

相关问题