如何在java Web应用程序中访问WEB-INF / META-INF中的文件?

时间:2014-07-17 19:01:06

标签: java tomcat classloader

所以我读的这本书说:

  

与JAR文件不同,根级别/ META-INF目录不在   应用程序类路径。您无法使用ClassLoader获取   此目录中的资源。然而,/ WEB-INF / classes / META-INF已启用   类路径。您可以放置​​所需的任何应用程序资源   这个目录,它们可以通过ClassLoader访问。

目前在WEB-INF目录下,我有一个META-INF目录和一个名为:test.txt的文件。

如何使用ClassLoader 阅读此文件

我试过这个:

URL resource = this.getClass().getClassLoader().getResource("test.txt");
System.out.println(resource);

但是这会返回null。

我知道该文件可以像:

InputStream resourceContent = getServletContext().getResourceAsStream("/WEB-INF/META-INF/test.txt");
System.out.println(resourceContent);

但这不是我想要的。我想了解ClassLoader ..

感谢。

3 个答案:

答案 0 :(得分:5)

尝试使用:

URL resource=this.getClass().getClassLoader().getResource("META-INF/test.txt");

由于您的/ META-INF位于您的根路径中,您必须使用META-INF / test.txt来访问它。

答案 1 :(得分:3)

  

目前在WEB-INF目录下我有一个META-INF目录

然后你做错了。阅读你自己的报价。它说WEB-INF / classes / META-INF。

URL resource = this.getClass().getClassLoader().getResource("test.txt");

应该是:

URL resource = this.getClass().getClassLoader().getResource("META-INF/test.txt");

答案 2 :(得分:0)

如果将文本文件放在WEB-INF中,则可以这样做,

InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("../test.txt");

在您的情况下,由于文本文件位于WEB-INF内的META-INF文件夹中,因此您可以像这样访问文本文件,

InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("../META-INF/test.txt");