我有一个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。我真的不明白它会如何影响事情,但我似乎无法让文件阅读再次起作用。 到目前为止,我已经尝试过:
它们都没有工作,在本地开发环境中找不到文件(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");
这解决了我的问题。