GAE资源文件FileNotFoundException

时间:2015-05-27 06:51:48

标签: java google-app-engine

在我的appconfig.xml中,我有:

<resource-files>
    <include path="/emailtemplates/**.html" />
</resource-files>

当我尝试阅读文件时,我总是得到FileNotFoundException。我已经尝试过,有没有尾随/,但它没有任何区别。我还检查了打包应用程序中存在的文件。

我的项目由模块组成,我在Windows上的本地开发系统上尝试这个。我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

当你提供的信息很少时,很难说出错了什么。但是,我可以举例说明我如何使用资源。

  • 我使用maven,因此我的资源文件转到src\main\resources\*
  • 在代码中,我使用this.getClass().getResource("/" + filename).getPath()来获取完整路径(请注意,在这种情况下,&#39; /&#39;指的是资源所在的根。通常&#39; /& #39;将引用文件系统中的根目录或Java中的工作目录
  • 然后像你一样打开文件,即。 new FileInputStream(pathFromAbove)

我的pom.xml配置为包含我的资源:

<build>
    <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
        ...

答案 1 :(得分:0)

首先,我将资源文件夹移动到WEB-INF文件夹中。优点是我的appengine-web.xml中不需要任何额外的配置,这可以消除一点故障。

其次,我现在使用ServletContext来获取资源文件的完整路径。在我使用path作为new File的参数并且不起作用之前。在我认为的文档中,这没有出现。所以我的工作代码来读取文本文件如下:

StringBuilder sb = new StringBuilder();
Scanner scanner = new Scanner(new File(context.getRealPath(path)), "UTF-8");
while (scanner.hasNextLine())
    sb.append(scanner.nextLine());
scanner.close();