我的MainClass.java有一个main方法,其中包含以下代码来读取excel文件
String xlsxFilename = args[0];
try (InputStream fis = MainClass.class.getClassLoader().getResourceAsStream(xlsxFilename);
Workbook workbook = WorkbookFactory.create(fis);) {
...
这个类包含在一个jar文件中,放在名为lib的文件夹中,我正在使用shell脚本执行它
run.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文件?
答案 0 :(得分:1)
我认为问题出在这行代码中:
InputStream fis = MainClass.class.getClassLoader().getResourceAsStream(xlsxFilename)
当且仅当您的XLS在类路径中时,即在JVM的xlsxFilename
选项指定的文件夹中或内部时,类加载器才能找到文件-classpath
。 jar 存档。在第一种情况下,你的line命令应该是这样的:
java -classpath "your.jar:/path/to/xls/folder" in.test.MainClass $1
显然/path/to/xls/folder
是您必须放置xls文件的文件夹。
在后一种情况下,XLS文件必须位于.class
个文件的根文件夹中。
我建议您使用绝对文件路径加载XLS文件。