首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoClassDefFoundError: HSSFWorkbook

NoClassDefFoundError: HSSFWorkbook
EN

Stack Overflow用户
提问于 2015-11-17 20:53:40
回答 2查看 3.3K关注 0票数 0

我正在尝试使用MapReduce程序处理Excel工作表。我已经编写了ExcelParser,并且没有编译时错误。但是当我运行它的时候,它抛出了下面的错误。

代码语言:javascript
复制
java.lang.Exception: java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook
    at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook
    at indiaweather.ExcelParser.parseExcelData(ExcelParser.java:20)
    at indiaweather.ExcelRecordReader.initialize(ExcelRecordReader.java:34)
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:545)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:783)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.hssf.usermodel.HSSFWorkbook
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 11 more

我已经添加了所需的jar文件。下面是我的ExcelParser程序。

代码语言:javascript
复制
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

public class ExcelParser {

    private static final Log LOG = LogFactory.getLog(ExcelParser.class);
    private StringBuilder currentString = null;
    private long bytesRead = 0;

    public String parseExcelData(InputStream is) {
        try {
            HSSFWorkbook workbook = new HSSFWorkbook(is);

            // Taking first sheet from the workbook
            HSSFSheet sheet = workbook.getSheetAt(0);

            // Iterate through each rows from first sheet
            Iterator<Row> rowIterator = sheet.rowIterator();
            currentString = new StringBuilder();
            while (rowIterator.hasNext()) {
                Row row = rowIterator.next();

                // For each row, iterate through each columns
                Iterator<Cell> cellIterator = row.cellIterator();

                while (cellIterator.hasNext()) {

                    Cell cell = cellIterator.next();

                    switch (cell.getCellType()) {
                    case Cell.CELL_TYPE_BOOLEAN:
                        bytesRead++;
                        currentString.append(cell.getBooleanCellValue() + "\t");
                        break;

                    case Cell.CELL_TYPE_NUMERIC:
                        bytesRead++;
                        currentString.append(cell.getNumericCellValue() + "\t");
                        break;

                    case Cell.CELL_TYPE_STRING:
                        bytesRead++;
                        currentString.append(cell.getStringCellValue() + "\t");
                        break;

                    }
                }
                currentString.append("\n");
            }
            is.close();
        } catch (IOException e) {
            LOG.error("IO Exception : File not found " + e);
        }
        return currentString.toString();

    }

    public long getBytesRead() {
        return bytesRead;
    }

}

我已经在Buildpath中添加了poi-3.13 jar。我在谷歌上搜索了一下,但没有一个解决方案不能解决这个问题。我也尝试添加旧版本的jar文件。但是什么都没有用。

EN

回答 2

Stack Overflow用户

发布于 2015-11-17 20:56:30

您可能已经将jar添加到构建路径中,这会使代码进行编译,但它也需要位于Java类路径中,以便在您运行它时能够工作。

如果您从命令行运行它,请使用带有java命令的-classpath开关来添加jar。您还可以将其添加到系统上的CLASSPATH环境变量中。

票数 0
EN

Stack Overflow用户

发布于 2015-11-17 20:58:02

我认为您还需要两个jar文件...poi-ooxml.jarpoi-ooxml-schemas-jar。希望这能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33757468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档