【问题标题】:How can I access a file in WEB-INF/META-INF in a java web app?如何在 Java Web 应用程序中访问 WEB-INF/META-INF 中的文件?
【发布时间】:2014-09-08 19:02:10
【问题描述】:

所以我正在读的书说:

与 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..

谢谢。

【问题讨论】:

    标签: java tomcat classloader


    【解决方案1】:

    如果你把文本文件放在你的 WEB-INF 中,你可以这样做,

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

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

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

    【讨论】:

      【解决方案2】:

      试试这个:

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

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

      【讨论】:

        【解决方案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");
        

        【讨论】:

          最近更新 更多