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

时间:2016-04-08 15:27:17

标签: java tomcat

我正在使用带有Eclipse和Java 8的Tomcat 7编写动态Web模块,我的问题是构建路径上所需的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。如何在不获取空指针的情况下指定文件的工作路径(不使用绝对路径)?

2 个答案:

答案 0 :(得分:2)

问题是SystemClassLoader用于启动程序,因此如果您尝试在Web容器(如tomcat)中搜索资源,则无法正常工作。

如果我是你,我会使用以下内容,

this.getClass().getResource(“/top.txt”)

答案 1 :(得分:-2)

请在下面使用...
String tempPath = new File("")。getAbsolutePath();
String filePath = tempPath +" conf / test.txt&#34 ;;

使用ClassLoader.getResource(),下面是解释......

ClassLoader :: getSystemResource()使用系统类加载器。这使用用于启动程序的类路径。如果您位于诸如tomcat之类的Web容器中,则不会从WAR文件中获取资源。

Class< T> .getResource()将类的包名称添加到资源名称,然后委托给它的类加载器。如果资源存储在镜像类的包层次结构中,请使用此方法。

ClassLoader.getResource()委托给它的父类加载器。这最终将一直搜索资源到系统类加载器。