0

У меня есть простое Java-приложение со следующей структурой папок.Пути FileOutputStream в веб-приложении java/jsp

enter image description here

Когда я развернуть веб-приложение, оно имеет data.json файл в WEB-INF папку/классов. Мне нужно записать данные в этот файл из пакета контроллера класса controller.java, который находится в папке WEB-INF/classes.

Я пробовал следующий код.

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

Это не дает мне никакой ошибки, предполагающей, что операция происходит в файле где-то на моем компьютере.

Как я могу записать файл data.json? Я не могу дать абсолютный путь здесь.

+0

Взгляните на это сообщение мая помогает: http://stackoverflow.com/questions/4340653/file-path-to-resource-in-our-war- web-inf-папка – esprittn

ответ

1

После код работал,

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

WEB-INF/classes для класса-пути. Файлы должны считаться доступными только для чтения, кэшируемыми ресурсами (getResource, getResourceAsStream).

HttpRequest.getServletContext().getRealPath("/WEB-INF") может использоваться, для путей к файловой системе.

Я предлагаю использовать файлы классов как template, скопировал первый раз на путь реальной файловой системы, а затем был перезаписан.

Использование /, а не Windows \\.

Использовать close(), а затем flush() не требуется.

Использование getBytes(StandardCharsets.UTF_8).

+0

Можно ли разместить файл data.json в папке WEB-INF за пределами классов? –

+1

за пределами WEB-INF он будет напрямую доступен для внешнего мира. любой запрос /yourapp/data.json будет служить этому файлу, если вы явно не защитите его. –

+0

Что такое HTTPRequest? Как я могу это получить. Я могу передать объект «HttpServletRequest» из jsp в java-файл, но он не содержит метода getServeletContext(). –

Смежные вопросы