two*_*e18 11 java file classloader
这个问题一直困扰着我.我必须在我的java应用程序中加载几个文件,到目前为止我工作的唯一方法是这样的:
URL hsURL;
if(System.getProperty("os.name").toLowerCase().contains("windows")) {
hsURL = new URL("file:/" + System.getProperty("user.dir") + "/helpsets/helpset.hs");
}
else {
hsURL = new URL("file://" + System.getProperty("user.dir") + "/helpsets/helpset.hs");
}
Run Code Online (Sandbox Code Playgroud)
但这是丑陋可怕的.有一段时间我以为我有这个工作:
hsURL = ClassLoader.getSystemResource("helpsets/helpset.hs");
Run Code Online (Sandbox Code Playgroud)
但是由于某些原因它不再起作用(我必须改变一些东西而不是注意到它.它返回null.
我应该使用getResource()而不是getSystemResource()(如果是这样,为什么getSystemResource()是静态的而不是getResource())?
我正在使用eclipse,我尝试在构建路径(classpath)中包含该文件夹而不包括它,它似乎没有什么区别.
Jon*_*eet 24
getSystemResource是静态的,因为它将使用静态可用的系统类加载器.(ClassLoader.getSystemClassLoader)
如果您的资源在类路径中可用,我建议使用ClassLoader.getResource()或Class.getResource来自适当的类,例如
Foo.class.getResource("/helpsets/helpset.hs");
Run Code Online (Sandbox Code Playgroud)
(ClassLoader.getResource是"绝对的"; Class.getResource是相对于类的包,除非你用'/'作为前缀.)
如果这不起作用,请根据类路径以及文件的位置发布应用程序的配置方式.
编辑:我通常发现URL不如a InputStream,所以我使用getResourceAsStream而不是getResource.因人而异