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

7
所读的书说:
与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个回答

7

尝试使用这个:

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

由于您的/META-INF位于根路径下,因此您需要使用META-INF/test.txt来访问它。


4
“目前,在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");

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");

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