Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ApachePOI库读取Excel(xlsx)文件会引发NullPointerException_Java_Excel_Nullpointerexception_Apache Poi_Tomcat7 - Fatal编程技术网

Java 使用ApachePOI库读取Excel(xlsx)文件会引发NullPointerException

Java 使用ApachePOI库读取Excel(xlsx)文件会引发NullPointerException,java,excel,nullpointerexception,apache-poi,tomcat7,Java,Excel,Nullpointerexception,Apache Poi,Tomcat7,我正在使用EclipseIDE构建一个JSP web应用程序。web应用程序在tomcat服务器7版上无问题加载。我们有一个新的要求,从xls和xlsx文件读取。因此,我们使用ApachePOI库(4.1.2)实现了以下功能:我删除了其他代码,因为它们与本文无关 FileInputStream file = new FileInputStream(new File(args[0])); //Create Workbook instance holding reference t

我正在使用EclipseIDE构建一个JSP web应用程序。web应用程序在tomcat服务器7版上无问题加载。我们有一个新的要求,从xls和xlsx文件读取。因此,我们使用ApachePOI库(4.1.2)实现了以下功能:我删除了其他代码,因为它们与本文无关

FileInputStream file = new FileInputStream(new File(args[0]));

        //Create Workbook instance holding reference to .xlsx file
        XSSFWorkbook workbook = new XSSFWorkbook(file); //<- This is where the exception occurs

        //Get first/desired sheet from the workbook
        XSSFSheet sheet = workbook.getSheetAt(0);

        //Iterate through each rows one by one
        Iterator<Row> rowIterator = sheet.iterator();
FileInputStream file=newfileinputstream(新文件(args[0]));
//创建包含对.xlsx文件引用的工作簿实例

XSSF工作簿=新XSSF工作簿(文件)// 我试图发表评论,但我的排名不允许我这样做。这不是一个答案(所以请不要太苛刻),但这是我在你的情况下应该做的(上个月我一直在使用java和excel文件,我做得很好)


你可以发布你的结果,我会试试看。

在你尝试读取文件之前,你确定上传完成了吗? 因为stacktrace: 在com.MyClient.AD.util.UploadEstimateUT.start(UploadEstimateUT.java:85)
它在开始上传时

我知道当我从Spring rest服务收到一个资源时,我也遇到了类似的POI问题,然后保存并重新打开它

你试过下列方法吗

  • 把文件写到别的地方。然后读一读

  • 使用xls工作簿。通常我建议使用
    Workbook工作簿=WorkbookFactory.create(input)以创建工作簿。POI的一大优点是它提供了
    工作簿
    接口,可以对XLS和XLSX文件进行标准化操作


在的第33行抛出NullPointerException。电话是:

return _classLoader.getResourceAsStream(resourceName);
这意味着_classLoader为空_类加载器被传递给构造函数

ClassLoaderResourceLoader对象是在以下内容的第182行创建的:

这意味着_classloader为null,这意味着indexclass.getClassLoader()为null

getClassLoader()何时可以返回null?报告说:

一些实现可能使用null来表示引导类 加载器。如果 类由引导类装入器装入


引导?它响了吗?是的,您将所有JAR放在引导条目中,这意味着它们是由引导类装入器装入的。正如我在一篇评论中所说(您似乎忽略了这一点),JAR的正确位置是应用程序的WEB-INF\lib目录。所以只要把它们放在那里就可以了。

你确认文件流不是空的吗?请共享args[]arrayYes@ChadNC的内容,文件流不是空的。@shihabudheenk,args[0]像C:\\Program Files\\Apache Software Foundation\\Tomcat 7.0\\wtpwebapps\\MyWebProject\\excel\\myexcel.xlsxFriends一样保存文件的路径,关于这个问题,我有一些更新(在主线程中添加了更新1)。请看看这是否能帮到你谢谢你调查我的问题。我添加了空检查代码并调试了应用程序。控件进入非空区域,控制台窗口显示“我的文件不为空”。正如我在最初的帖子中提到的,相同的代码在我同事的机器上工作,但在我的机器上不工作。不知道有什么区别。嗨,赫曼特。知道了。我一直在仔细阅读,并有一个建议。请尝试删除文件的绝对路径,并使用相对路径,看看是否有效。您好,Sherma234,无论我尝试的是哪种虚拟路径,我都会得到java.io.FileNotFoundException:\excel\123.xlsx。但我认为定位文件不是问题所在。因为即使我硬编码到一个现有的文件,异常仍然保持在我原始请求中发布的状态。嗨,magicmn,我已经更新了我的代码,仍然得到相同的NullPointerException。嗨,magicmn,我已经在更新3下的主帖子中添加了异常详细信息。请看这是否有助于进一步缩小问题的范围。我也尝试过通过硬编码从不同的路径读取xlsx。是的,我通过两种方法检查并查看该位置中的文件:1。我对代码进行了脱胶处理,并在工作簿准备初始化时停止,从该位置引用该文件。我打开了,看到文件正在打开,记录也在里面。我关闭并继续调试,仍然是NullPointerException。2.我硬编码了xlsx文件已经存在的文件位置,但还是发生了异常。
return _classLoader.getResourceAsStream(resourceName);
_classloader = indexclass.getClassLoader();
...
_resourceLoader = new ClassLoaderResourceLoader(_classloader);