我有一个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。 我不太了解它如何影响事物,但似乎无法使文件读取再次正常工作。 到目前为止,我已经尝试过:
它们都不起作用,无法在本地开发环境中找到文件(尚未部署应用程序)。
非常感谢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");
这解决了我的问题。