Я пытаюсь использовать файл при запуске приложения в качестве JAR. Когда я запускаю приложение через Intelij, все нормально. Однако, когда я пытаюсь запустить его через jar, я не могу получить доступ к файлу. Я пытался прочитать несколько тем, содержащих похожие материалы, но ни одна из них не помогла (например, Чтение файла ресурса из jar или Как мне прочитать файл ресурса из Java файла jar? ) Вот мое целевое дерево и ресурсы:
![enter image description here](https://i.stack.imgur.com/GFc94.png)
Когда я использую
String path = String
.join("", "classpath:static\assets\config\", fileName);
File file = ResourceUtils.getFile(path);
InputStream targetStream = new FileInputStream(file)
Во время интелий беги, все работает.
В случае с банкой я попробовал:
String path = String
.join("", "static\assets\config\", fileName).replace("\\","/")).toExternalForm();
String path2 = String
.join("", "static\assets\config\", fileName).replace("\\","/")).getFile();
String path3 = String
.join("", "static\assets\config\", fileName).replace("\\","/")).getPath();
и многие другие. Они приводят к правильному пути, например:
- file: / D: / Projects / myProject / target / classes / static / assets / config / fileName (в случае toExternalForm)
/ D: / Projects / myProject / target / classes / static / assets / config / fileName (в случае getFile)
Однако все они приводят к нулевому InputStream, когда я пытаюсь:
InputStream in = getClass().getResourceAsStream(everyPath);
Я получаю ошибку: java.io.FileNotFoundException: D:\Projects\myProject\target\project-app-1.0.jar\BOOT-INF\classes\static\assets\config\fileName (The system cannot find the path specified)
Когда путь в project-app-1.0.jar, когда я открываю его с помощью 7zip, равен: D:\Projects\myProject\target\project-app-1.0.jar\BOOT-INF\classes\static\assets\config\fileName
Вот так выглядит мой обработчик ресурсов:
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/resources/", "classpath:/static/"};
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(
CLASSPATH_RESOURCE_LOCATIONS);
}