Включить Excel в исполняемый файл.jar
Я должен прочитать данные из файла Excel и показать данные в моем приложении. Я хочу упаковать мой файл Excel (файл данных) вместе с исполняемым файлом jar. Я создал исходную папку в моей основной папке проекта и назвал ееres
". Внутриres
', У меня есть 2 подпапки (обычные папки) под названием "images
" а также "data
Msgstr "В папке данных я разместил файл excel.
Структура моего проекта
Путь сборки
Экспортировать как JAR
Проблема:
Приложение работает безупречно, когда я запускаю его из Eclipse, но когда я экспортирую его как jar, приложение не работает. Оно может найти изображения, но не может найти файл Excel.
Другими словами, когда я запускаю приложение из затмения (Правый клик -> Запуск от имени -> Java-приложение), оно работает отлично. Но когда запускается экспортированный файл JAR ("Tool.jar"), он не может прочитать данные Excel.
Код для чтения Excel
URL excelResources = getClass().getResource("/excel/data.xls");
File excel = new File(excelResources.toURI());
FileInputStream fis = new FileInputStream(excel);
2 ответа
Это...
URL excelResources = getClass().getResource("/excel/data.xls");
File excel = new File(excelResources.toURI());
FileInputStream fis = new FileInputStream(excel);
Не так, как работают встроенные ресурсы. Вы больше не можете получить доступ к файлу Excel, как если бы он был файлом в файловой системе, потому что это не так, он встроен в файл Jar.
Если вам нужен InputStream, используйте Class#getResourceAsStream
try (InputStream is = getClass().getResourceAsStream("/excel/data.xls")) {
//...
} catch (IOException exp) {
exp.printStackTrace();
}
Используя maven это можно сделать с помощью плагина:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>your.class.Name</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<resources>
<resource>
<directory>${basedir}/src/main/res/data</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>