我正在使用带有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
。如何在不获取空指针的情况下指定文件的工作路径(不使用绝对路径)?
答案 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()委托给它的父类加载器。这最终将一直搜索资源到系统类加载器。