Как создать файл, используя строку пути этого файла, который находится в jar? - PullRequest
0 голосов
/ 25 января 2019

Я создал приложение с затмением, используя эту схему:

  • App
    • ЦСИ
      • пакет
        • a.java
    • ресурсы
      • XMLs
        • b.xml

В a.java я создаю и использую файл с таким кодом:

File file = new File("resources/xmls/b.xml);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(file);

Этот код хорошо работает в Eclipse, но когда я создаю исполняемый jar, я получаю эту ошибку (я использовал командную строку для запуска этого файла):

java.io.FileNotFoundException: D:\PROJECTS\App\build\dist\resources\xmls\b.xml (The system cannot find the path specified)
...

расположение файла jar

D:\PROJECTS\App\build\dist  

Кажется, он пытается найти папку ресурсов в каталоге, где находится jar. Мой вопрос, как дать эту строку пути файла b.xml в качестве параметра для файла для запуска jar?

1 Ответ

0 голосов
/ 25 января 2019

Вы можете использовать public URL getResource(String name) метод ClassLoader class, который:

Находит ресурс с заданным именем.Ресурс - это некоторые данные (изображения, аудио, текст и т. Д.), К которым код класса может получить доступ независимо от местоположения кода.Имя ресурса - это разделенное '/' имя пути, которое идентифицирует ресурс.Этот метод сначала ищет ресурс в родительском классе;если родитель имеет нулевое значение, выполняется поиск пути загрузчика классов, встроенного в виртуальную машину.В случае ошибки этот метод вызовет findResource (String) для поиска ресурса.

Таким образом, ваш код будет выглядеть следующим образом:

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("xmls/b.xml").getFile());
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(file);
document.getDocumentElement().normalize();
//System.out.println("####Root element : " + document.getDocumentElement().getNodeName());

Редактировать

Я создал ту же структуру, что и вы, с файлом примера xml, содержащим

<?xml version="1.0"?>
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>

И в распечатке я получил: #### Корневой элемент: note ,Я могу поделиться с вами кодом, если хотите.В любом случае, убедитесь, что у вас есть разрешение на ваше пространство и что ваш путь будет отформатирован!(Я использую Linux-машину, без окон, без проблем: D !)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...