在可执行 .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();
}
我必须从 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();
}