Google App Engine - 用Java读取静态文件

时间:2014-04-18 12:59:29

标签: java google-app-engine file-io

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

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文件夹下
  • 使用旧方法
  • 使用此代码中提供的字符串剪切,但开头没有短划线

它们都没有工作,在本地开发环境中找不到文件(app尚未部署)。


更新

非常感谢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");

这解决了我的问题。

0 个答案:

没有答案