java/jsp Web 应用程序中的 FileOutputStream 路径

FileOutputStream paths in java/jsp web application

我有一个简单的 java Web 应用程序,具有以下文件夹结构。

当我部署 Web 应用程序时,它在 WEB-INF/classes 文件夹中有 data.json 文件。我需要从 WEB-INF/classes 文件夹中的 controller.java class 控制器包中将数据写入此文件。

我尝试了以下代码。

FileOutputStream output = new FileOutputStream("..\data.json", true);
output.write(jsonObject.toJSONString().getBytes());
output.flush();

这没有给我任何错误,表明该操作发生在我计算机某处的文件中。

如何写入 data.json 文件?我不能在这里给出绝对路径。

WEB-INF/classes 用于 class 路径。那里的文件应该被认为是只读的、可缓存的 resources (getResource, getResourceAsStream).

可以用HttpRequest.getServletContext().getRealPath("/WEB-INF"), 对于文件系统路径。

我建议使用classes文件作为模板,第一次复制到一个真实的文件系统路径,然后被覆盖。

使用 /,而不是 Windows \

使用close()然后flush()就不需要了。

使用getBytes(StandardCharsets.UTF_8)

以下代码有效,

FileOutputStream output = new FileOutputStream( request.getSession().getServletContext().getRealPath("WEB-INF/classes/data.json"), false);