Google App Engine-读取Java中的静态文件

问题描述 投票:0回答:0

我有一个App Engine Servlet,它基于JSON文件(存储在WEB-INF下的“资源”文件夹中)创建对象。 我在单独的类中处理文件的解析:

public class EventParser
{
    static Gson gson = new Gson();
    static String fileName = "/SOServices-war/src/main/webapp/WEB-INF/Resources/mockEvents.json";
    static File file = new File(fileName);

    public static List<Event> readDataFromJSON() throws IOException
    {
        InputStreamReader inReader = new InputStreamReader(new FileInputStream(file), "UTF-8");
        String stringFromRes = null;
        try (BufferedReader br = new BufferedReader(inReader))
        {
            StringBuilder sb = new StringBuilder();
            String sCurrentLine;

            while ((sCurrentLine = br.readLine()) != null)
            {
                sb.append(sCurrentLine);
                sb.append(System.lineSeparator());
            }

            stringFromRes = sb.toString();

        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

        List<Event> events = new ArrayList<Event>();
        Type listOfTestObject = new TypeToken<List<Event>>(){}.getType();
        events = gson.fromJson(stringFromRes, listOfTestObject);

        return events;
    }
}

需要指出的是,这曾经使用“ WEB-INF /”作为路径来工作,但是我已经重新创建了该项目(使用新的Maven教程),并且它具有一个新的文件夹结构:而不是/ war / WEB- INF,它看起来像/ AppName-war / src / main / webapp / WEB-INF。 我不太了解它如何影响事物,但似乎无法使文件读取再次正常工作。 到目前为止,我已经尝试过:

  • 仅使用“”代替“ WEB-INF /”
  • 将文件直接放在webapp文件夹下
  • 使用旧方法
  • 使用此代码中提供的字符串,但已在开头添加了破折号

它们都不起作用,无法在本地开发环境中找到文件(尚未部署应用程序)。


更新资料

非常感谢McDowell为我提供了链接,虽然有点不同,但是却很有帮助。 我现在使用servletContext参数调用readDataFromJSON()方法,如下所示:

List<Event> events = EventParser.readDataFromJSON(this.getServletContext());

然后在解析器中:

String filePath =  context.getRealPath(fileName);
InputStreamReader inReader = new InputStreamReader(new FileInputStream(new File(filePath)), "UTF-8");

这解决了我的问题。

java google-app-engine file-io
© www.soinside.com 2019 - 2024. All rights reserved.