получить файл из JAR

Я использую абстракцию Spring Resource для работы с ресурсами (файлами) в файловой системе. Одним из ресурсов является файл внутри файла JAR. Согласно следующему коду, кажется, что ссылка действительна

ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();

// The path to the resource from the root of the JAR file
Resource fileInJar = resourcePatternResolver.getResources("/META-INF/foo/file.txt");

templateResource.exists(); // returns true
templateResource.isReadable();  // returns true

. На данный момент все хорошо, но затем, когда я пытаюсь преобразовать ресурс в файл ,

templateResource.getFile();

, я получаю исключение

java.io.FileNotFoundException: class path resource [META-INF/foo/file.txt] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/D:/m2repo/uic-3.2.6-0.jar!/META-INF/foo/file.txt        
at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:198)
at org.springframework.core.io.ClassPathResource.getFile(ClassPathResource.java:174)

Как правильно получить ссылку File на ресурс , который существует внутри файла JAR?

12
задан Dónal 28 December 2015 в 18:32
поделиться

3 ответа

Каков правильный путь получить файл ссылка на ресурс, который существует внутри файла JAR?

Правильный способ - не делать этого вообще, потому что это невозможно. Файл представляет собой реальный файл в файловой системе, которым не является запись JAR, если у вас нет для этого специальной файловой системы.

Если вам просто нужны данные, используйте getInputStream () . Если вам нужно удовлетворить API, который требует объект File , то я боюсь, что единственное, что вы можете сделать, - это создать временный файл и скопировать в него данные из входного потока.

18
ответ дан 2 December 2019 в 18:17
поделиться

Если вы хотите его прочитать, просто вызовите resource.getInputStream ()

Сообщение об исключении довольно ясное - файл не находится в файловой системе, поэтому у вас не может быть Экземпляр файла . Кроме того - что будет делать с этим файлом , кроме чтения его содержимого?

4
ответ дан 2 December 2019 в 18:17
поделиться

Беглый взгляд на ссылку , которую вы предоставили для документации по ресурсам, говорит следующее:

Throws: IOException if the resource cannot be resolved as absolute file path, 
i.e. if the resource is not available in a file system

Может быть, текстовый файл находится внутри банки? В этом случае вам придется использовать getInputStream () для чтения его содержимого.

-1
ответ дан 2 December 2019 в 18:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: