Включить Excel в исполняемый файл.jar

Я должен прочитать данные из файла Excel и показать данные в моем приложении. Я хочу упаковать мой файл Excel (файл данных) вместе с исполняемым файлом jar. Я создал исходную папку в моей основной папке проекта и назвал ееres". Внутриres', У меня есть 2 подпапки (обычные папки) под названием "images" а также "dataMsgstr "В папке данных я разместил файл 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>
Другие вопросы по тегам