user12031183
user12031183

Reputation:

Reading a .docx file with Apache POI

I want to read and print out a whole .docx file into the console for now. I read that you cannot do it without Apache POI or Docx4J, I tried both and failed twice. Also I am aware that this question already exists on Stackoverflow but I am afraid it might be outdated.

This is my code with Apache POI right now.

import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
import java.util.List;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;

public class test {
    public static void readDocxFile(String fileName) {
        try {
            File file = new File(fileName);
            FileInputStream fis = new FileInputStream(file.getAbsolutePath());
            XWPFDocument document = new XWPFDocument(fis);
            List<XWPFParagraph> paragraphs = document.getParagraphs();
            for (int i = 0; i < paragraphs.size(); i++) {
                System.out.println(paragraphs.get(i).getParagraphText());
            }
            fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        readDocxFile("C:\\Basics.docx");
    }
} 

It was taken from another question on here but, it does not work. I get following Error message:

Exception in thread "main" 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:37)
    at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:142)
    at test.readDocxFile(test.java:16)
    at test.main(test.java:28)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.compress.archivers.zip.ZipFile
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:604)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 5 more

Upvotes: 0

Views: 2471

Answers (1)

Olivier Depriester
Olivier Depriester

Reputation: 1625

It's due to a library that is not directly included in POI. If you use maven add the following dependency to your project :

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.18</version>
</dependency>

Upvotes: 1

Related Questions