Доступ к файлам вне скомпилированного файла jar / war - PullRequest
0 голосов
/ 06 ноября 2019

Я создаю приложение Spring Boot, которое извлекает некоторые данные из API веб-сайта и сохраняет ответ в виде файла .json (для кэширования данных, а не для извлечения нового содержимого при каждом обновлении страницы)

У меня естьзатем упаковал приложение в файл .jar. Но при попытке запустить его. Я получаю java.io.FileNotFoundException каждый раз, когда я пытаюсь загрузить файл. Изучил немного, и мне нужно получить файл .json в виде потока. Но я также хочу переопределить файл, когда кэш старше 5 минут. Также пытались использовать maven-resources-plugin для перемещения файлов json в папку «JSON» в корне «целевой» папки.

Итак, мой вопрос: как мне получить доступ к файлу из папки JSON в корневой папке, где находится мой файл .jar? Я пытался использовать "./JSON/file.json" и ".JSON / file.json", но оба выдают исключение FileNotFoundException.

EDIT: добавлена ​​структура файла скомпилированного проекта.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Структура maven для этого - src/main/webapp/, будет непубличный WEB-INF/, который является хорошим местом для персонализированного json: WEB-INF/JSON/ (с учетом регистра).

Чтобы получить физический кореньВ каталоге веб-приложения можно использовать контекст сервлета или контекст jsf. ServletContext.getRealPath("/WEB-INF/JSON"). Возможно развернуть войну как «взорванную».

В качестве альтернативы вы можете использовать внешнюю конфигурацию, как это разрешено в Spring.

По умолчанию файлы шаблонов могут храниться как ресурсы и копироваться в файловую систему. .

URL url = getClass().getResource("/data/JSON/new.json");
Path path = Paths.get(url.toURI());
Path path2 = Paths.get(request.getServletContext().getRealPath("/WEB-INF/JSON/untitled.json"));
Files.copy(path, paths2);
0 голосов
/ 06 ноября 2019

Вы должны всегда указывать абсолютный путь внешних ресурсов (вне пути к классам). Это необходимо, потому что если вы укажете относительный путь, приложение будет искать, начиная с пути к классу, а не из папки, в которую входят jar и папка json.

Вы можете сделать что-то вроде этого:

new FileInputStream(new File("file://absolute_path/json/jsonfile.json"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...