我正在尝试使用Class.getResource("rsc/my_resource_file.txt")
在Eclipse应用程序中加载文件。但是,无论我在Eclipse中做什么,类路径总是只包含Eclipse Launcher的一个条目:
... /日蚀/插件/ 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解决了这个问题。
答案 0 :(得分:8)
请退后一步。您的具体问题是资源返回null
,对吧?你确定它的路径是正确的吗?就像你一样,它与当前类的包相关。路径不应该以{{1}}开头相对于包根目录吗?
/
或者,您也可以使用上下文类加载器,它始终相对于类路径(包)根目录:
URL resource = getClass().getResource("/rsc/my_resource_file.txt");
// ...
至少,Eclipse发射器不应该归咎于此。
答案 1 :(得分:3)
右键单击该项目并按照属性进行操作。
答案 2 :(得分:3)
将文件放在源树中的顶级目录中。这通常被称为“src”。 然后,在构建项目时,文件将被复制到您的类目录中(名称不同)。最后,post build文件将在你的classpath中(在eclipse环境中)。
Class someClassObject = BlammyClassName.class;
someClassObject.getResource("my_resource_file.txt");
将返回您资源的网址。
someClassObject.getResourceAsStream("my_resource_file.txt");
将返回一个流。
编辑:更改为静态不引用类方法。
答案 3 :(得分:0)
发生此问题是因为Manifest.MF中的Bundle-ClassPath设置必须包含。 (请参见https://www.eclipse.org/forums/index.php/t/287184/),例如:
Bundle-ClassPath: .,
test.myapp.core
Bundle-ClassPath不会由插件向导自动添加,因此可能会导致一些问题。