Eclipse抛出ClassNotFoundException尽管我添加了正确的Apache POI .jar文件?

时间:2009-11-25 02:00:52

标签: java inputstream apache-poi

我正在使用servlet将.xls(Excel Spreadsheets)文件上传到服务器。我正在使用Apache FileUpload API作为业务逻辑的上传部分,为了确保这部分天气正常工作,我已成功尝试将.txt文件上传到Servlet,之后是来自servlet端的Apache FileUpload API给我一个InputStream,我将.txt的所有内容打印到控制台上。

不工作的部分是,当我尝试使用InputStream并将其转发到一种方法时,我扫描用户上传的.xls文件并将其打印在控制台上。抛出的异常是:

java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.WorkbookFactory

尽管我已将poi-3.5-FINAL-20090928.jarpoi-ooxml-3.5-FINAL-20090928.jar都添加到Java项目构建路径中,但仍会发生这种情况。应该提到的是后一个文件包含WorkbookFactory类。

然而,当我尝试扫描本地存在于硬盘驱动器上的.xls文件时,我从中导出InputStream并转发它以打印.xls的所有单元格,在控制台上完美地显示每行和每列上的单元格。有解决方案吗

2 个答案:

答案 0 :(得分:2)

您正在使用Apache Commons FileUpload,这意味着您正在使用Web应用程序。您是否将库放在webapp的/WEB-INF/lib文件夹中,正如您通常应该为任何第三方库所做的那样?您无需对Java Project Build Path执行任何操作。 Eclipse将自动获取构建路径中/WEB-INF/lib中的任何库,一旦部署,web应用程序将默认将这些库带入类路径中。

如果这没有帮助,那么请确保在类路径中没有其他地方的旧版本POI,这可能会导致类加载。这包括除了每个appserver /WEB-INF/lib下的webapp /lib(可能还有其他人,具体取决于make / version / configuration,请参阅文档以获取详细信息)和JRE /lib。如果那里有较旧的POI版本,则需要先将其删除。实际上,这些文件夹不应包含任何第三方特定于webapp的库,它只会使类路径混乱。

答案 1 :(得分:0)

解决方案非常简单:

  1. 下载此链接http://archive.apache.org/dist/poi/release/bin/poi-bin-3.9-20121203.zip
  2. 中的所有jar文件
  3. 解压缩文件并将所有jar文件复制到项目中的“\ WebContent \ WEB-INF \ lib \”。请注意:您必须在ECLIPSE中复制并粘贴到您的项目中,不要复制粘贴它通过Windows资源管理器或将其作为外部JAR放在java构建路径中,因为它永远不会工作。
  4. 就是这样,你已经完成了......:D 如果这可以解决您的问题,请告诉我。