我有一个JAVA EE应用程序。这种结构:
/iberiaApp
/iberiaApp/configFiles/hotel
/iberiaApp/config.jsp
/iberiaApp/WEB-INF/classes
在config.jsp
内我有这段代码:
<%=FileReader.readFiles("configFiles/hotel")%>;
和
public static List<String> readFiles (String folder) throws URISyntaxException {
ClassLoader classLoader = FileReader.class.getClassLoader();
URI uri = classLoader.getResource(folder).toURI();
但我得到一个nullpointer获取URI(classLoader.getResource(文件夹)返回null)
答案 0 :(得分:-2)
Web应用程序根目录本身不在运行时类路径上,因此您无法通过类加载器加载相对于Web应用程序根目录的资源。将配置文件放在src / main / resources下,因此在运行时它们将位于WEB-INF / classes下,并可通过类加载访问。
此外,您不希望将配置文件保留在Web应用程序根目录下,因为它们可以直接由Web应用程序用户访问。
答案 1 :(得分:-2)
查看以下说明: https://stackoverflow.com/a/3160706/1715121
几点说明:
您应该更喜欢[ClassLoader
] [1]返回的Thread#getContextClassLoader()
。
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
返回可以访问所有资源的最基本的类加载器。 Class#getClassLoader()
只返回有问题的类的(子)类加载器,它本身可能无法访问所需的资源。它总是在具有单个类加载器的环境中工作,但并不总是在具有复杂的类加载器层次结构的环境中工作,如webapps。
/WEB-INF
文件夹不在类路径的根目录中。 /WEB-INF/classes
文件夹是。因此,您需要加载相对于该属性的属性文件。
classLoader.getResource("/configFiles/hotel");