使用ClassLoader.getSystemResource在JAVA中获取文件路径

3
我正在使用Eclipse和Java 8编写一个动态Web模块,使用Tomcat 7进行开发。我的问题是,构建路径上所需的JAVA项目正在使用以下方式来加载文件(词汇表、字典等):
String filePath = "conf/test.txt"; // my test file is in WEB-INF/conf
String absolutePath = ClassLoader.getSystemResource(filePath).getPath();

我得到了一个空指针,因此无法找到文件。

使用以下代码时,它可以找到该文件:

String absolutePath = new File(filePath).getAbsolutePath();

问题是:

我需要使用 ClassLoader.getSystemResource。如何指定我的文件路径使其能够正常工作,而不会出现空指针异常(也不使用绝对路径)?


为什么你需要特别使用 #getsystemResource() ? - Ducaz035
因为我在构建路径中使用了其他开发人员编写的多个项目,并且它们都以那种方式加载文件。 - P-S
2个回答

5
您所面临的问题是使用SystemClassLoader来启动程序,因此如果您尝试在像Tomcat这样的Web容器中搜索资源,这将无法正常工作。
如果我是您,我会使用以下方法:
this.getClass().getResource(“/top.txt”)

3
如果您在静态方法中使用getClass(),会出现错误,那么可以使用TheClassName.class代替。感谢@Ducaz035的提示。 - CamiGrunge

-2
请使用以下代码... String tempPath = new File("").getAbsolutePath(); String filePath=tempPath+"conf/test.txt";
使用ClassLoader.getResource(),以下是解释...
ClassLoader::getSystemResource()使用系统类加载器。这使用了启动程序时使用的类路径。如果你在像Tomcat这样的Web容器中,它将无法从WAR文件中获取资源。
Class<T>.getResource()将类的包名称前置到资源名称中,然后委托给其类加载器。如果您的资源存储在反映您的类的包层次结构中,请使用此方法。
ClassLoader.getResource()委托给其父类加载器。这最终会一直搜索资源到达系统类加载器。

问题是如何具体使用ClassLoader.getSystemResource来查找我的文件。 - P-S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接