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

时间:2015-03-30 05:42:15

标签: java embedded-resource executable-jar

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

我的项目结构

project structure

构建路径

build path of project

导出为JAR

enter image description here

问题:

当我从Eclipse运行应用程序时,应用程序运行完美,但当我将其作为jar导出时,应用程序无法正常工作。它能够找到图像但无法找到excel文件。

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

阅读Excel的代码

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

2 个答案:

答案 0 :(得分:1)

此...

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

答案 1 :(得分:-1)

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