首页 > 解决方案 > 使用java获取word文件的文本

问题描述

我想使用java构建一个程序来获取word文件的文本。我正在使用 Apache POI。要获取 word 文档,我正在使用文件选择器。

到目前为止,这是我的代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


import org.apache.poi.xwpf.extractor.XWPFWordExtractor;  
import org.apache.poi.xwpf.usermodel.XWPFDocument;  


        wordFileButton.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent arg0) {
                // TODO Auto-generated method stub

                FileChooser fileChooser = new FileChooser();
                setupFilter(fileChooser);
                File wordFile= fileChooser.showOpenDialog(primaryStage);
                System.out.print(wordFile.getAbsolutePath());

                try {
                    getText(wordFile);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }



            }
        });



    private void setupFilter(FileChooser fileChooser) {
        fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Word document", "*.docx"));
    }

    private void getText(File file) throws Exception {
        XWPFDocument docx = new XWPFDocument(new FileInputStream(file));

        XWPFWordExtractor we = new XWPFWordExtractor(docx);
        System.out.println(we.getText());
    }

这是行不通的。相反,我得到一个错误:

/Users/name/Desktop/Das ist ein Test.docxException in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: org/apache/commons/compress/archivers/zip/ZipFile
    at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:307)
    at org.apache.poi.ooxml.util.PackageHelper.open(PackageHelper.java:47)
    at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:142)
    at Main.getText(Main.java:72)
    at Main$1.handle(Main.java:47)
    at Main$1.handle(Main.java:1)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at javafx.base/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.base/javafx.event.Event.fireEvent(Event.java:198)
    at javafx.graphics/javafx.scene.Node.fireEvent(Node.java:8885)
    at javafx.controls/javafx.scene.control.Button.fire(Button.java:203)
    at javafx.controls/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206)
    at javafx.controls/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
    at javafx.base/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at javafx.base/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)

    ... 49 more

我正在关注互联网上的两个教程。

标签: javaeclipsejavafxword

解决方案


推荐阅读