gpt4 book ai didi

java - 执行jar文件以加载类路径中的文件

转载 作者:行者123 更新时间:2023-12-01 11:44:49 24 4
gpt4 key购买 nike

我的 MainClass.java 有一个 main 方法,其中包含以下读取 Excel 文件的代码

String xlsxFilename = args[0];
try (InputStream fis = MainClass.class.getClassLoader().getResourceAsStream(xlsxFilename);
Workbook workbook = WorkbookFactory.create(fis);) {
...

此类包含在一个 jar 文件中,并放置在名为 lib 的文件夹中,我使用 shell 脚本执行它

运行.sh

#!/bin/sh
CP=lib/*:
java -cp "$CP" in.test.MainClass $1

现在我运行命令来执行sh文件

sh run.sh Sample.xlsx

但这会引发异常,

Exception in thread "main" java.lang.NullPointerException
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:79)

我猜这个异常是因为 getResourceAsStream 没有加载 excel 文件,并且 fis 对象为 null。当前目录对 getResourceAsStream() 不可见吗?如何读取 MainClass.java 当前目录中的 xls 文件?

最佳答案

我认为问题出在这行代码中:

InputStream fis = MainClass.class.getClassLoader().getResourceAsStream(xlsxFilename)

当且仅当您的 XLS 位于类路径中(即位于 JVM 的 -classpath 选项指定的文件夹中)时,类加载器才会找到文件 xlsxFilename ,或在您的 jar 存档中。在第一种情况下,您的行命令应如下所示:

java -classpath "your.jar:/path/to/xls/folder" in.test.MainClass $1

显然/path/to/xls/folder是您必须放置xls文件的文件夹。

在后一种情况下,XLS 文件必须位于 .class 文件的根文件夹中。

我建议您使用绝对文件路径加载XLS文件。

关于java - 执行jar文件以加载类路径中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29236983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com