在可执行 .jar 文件中包含 excel

Include excel in executable .jar file

我必须从 excel 文件中读取数据并在我的应用程序中显示数据。 我想将我的 excel 文件(数据文件)与可执行 jar 一起打包。我在我的主项目文件夹中创建了一个源文件夹 并将其命名为“res”。在“res”中,我有 2 个子文件夹(普通文件夹),名为“images”和“data”。在我的数据文件夹中 放置 excel 文件。

我的项目结构

构建路径

导出为 JAR

问题:

当我从 Eclipse 运行 应用程序运行完美,但当我将它导出为 jar 时,应用程序无法 work.It 能够找到图像但找不到 excel 文件.

换句话说,当我 运行 来自 eclipse 的应用程序(右键单击 -> 运行 As -> Java 应用程序)它 运行 完美.但是当启动导出的 JAR 文件 ("Tool.jar") 时,它无法读取 excel 数据。

要阅读的代码Excel

URL excelResources = getClass().getResource("/excel/data.xls");
File excel = new File(excelResources.toURI());
FileInputStream fis = new FileInputStream(excel);

使用 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>

这个...

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();
}