Apache POI读取.txt/.doc/.docx/.xls/.xlsx等格式文档

27 篇文章 0 订阅
7 篇文章 0 订阅

java使用poi读取txt、word、excel等文档。
pom.xml中添加依赖包:

    <dependencies>
    ...
        <!-- xls -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.12</version>
        </dependency>
        <!-- doc -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.12</version>
        </dependency>
        <!-- xlsx docx -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.12</version>
        </dependency>
    </dependencies>
```java
package me.voler.jechat.core;

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

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.extractor.ExcelExtractor;
import org.apache.poi.xssf.extractor.XSSFExcelExtractor;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.xmlbeans.XmlException;

/**
 * 支持取.txt、.doc、.docx、.xls、.xlsx,5种格式文档的内容,以字符串的形式返回。
 * {@link http://poi.apache.org}
 * 
 */
public class DocumentExtraction {

    /**
     * 取微软记事本中的内容,以字符串的形式返回。记事本中内容的编码为GBK
     * 
     * @param file
     * @return
     */
    public static String txt2String(File file) {
        StringBuffer buffer = new StringBuffer();
        try {
            InputStreamReader input = new InputStreamReader(new FileInputStream(file), "utf8");
            BufferedReader reader = new BufferedReader(input);

            String line = null;
            while ((line = reader.readLine()) != null) {
                buffer.append(line).append('\n');
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return buffer.toString();
    }

    /**
     * 取Excel xlsx中的内容,以字符串的形式返回。{@link http://poi.apache.org}
     * 
     * @param file
     * @return
     */
    @SuppressWarnings("resource")
    public static String xlsx2String(File file) {

        XSSFWorkbook xlsxwb = new XSSFWorkbook();
        try {
            OPCPackage pkg = OPCPackage.open(new FileInputStream(file));
            xlsxwb = new XSSFWorkbook(pkg);
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        ExcelExtractor extractor = new XSSFExcelExtractor(xlsxwb);
        extractor.setFormulasNotResults(true);
        extractor.setIncludeSheetNames(false);

        return extractor.getText();
    }

    /**
     * 取Excel xls中的内容,以字符串的形式返回。{@link http://poi.apache.org}
     * 
     * @param file
     * @return
     */
    @SuppressWarnings("resource")
    public static String xls2String(File file) {

        HSSFWorkbook xlswb = new HSSFWorkbook();
        try {
            POIFSFileSystem fileSystem = new POIFSFileSystem(new FileInputStream(file));
            xlswb = new HSSFWorkbook(fileSystem);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        ExcelExtractor extractor = new org.apache.poi.hssf.extractor.ExcelExtractor(xlswb);
        extractor.setFormulasNotResults(true);
        extractor.setIncludeSheetNames(false);

        return extractor.getText();
    }

    /**
     * 取Word doc中的内容,以字符串的形式返回。{@link http://poi.apache.org}
     * 
     * @param file
     * @return
     */
    public static String doc2String(File file) {
        StringBuffer buffer = new StringBuffer();

        WordExtractor extractor = null;
        POIFSFileSystem fileSystem;
        try {
            fileSystem = new POIFSFileSystem(new FileInputStream(file));
            extractor = new WordExtractor(fileSystem);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        String[] paragraphText = extractor.getParagraphText();
        for (String paragraph : paragraphText) {
            buffer.append(paragraph);
        }

        return buffer.toString();
    }

    /**
     * 取Word docx中的内容,以字符串的形式返回。{@link http://poi.apache.org}
     * 
     * @param file
     * @return
     */
    public static String docx2String(File file) {

        XWPFWordExtractor extractor = null;
        try {
            OPCPackage pkg = OPCPackage.open(new FileInputStream(file));
            extractor = new XWPFWordExtractor(pkg);
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (XmlException e) {
            e.printStackTrace();
        } catch (OpenXML4JException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return extractor.getText();
    }

}
Apache POI是一个用于Microsoft Office文档处理的Java库,它主要用于读取、创建和修改Office格式文件,如.doc、.xls和.xlsx。要将一个.doc格式的文件转换成.docx格式,你需要使用`XWPFDocument`(用于生成Word 2007+)和`POIFSFileSystem`(处理旧版本的二进制存储)。下面是一个简单的示例,展示了如何使用POI完成这个过程: ```java import org.apache.poi.xwpf.usermodel.*; import org.apache.poi.openxml4j.opc.OPCPackage; import java.io.*; public class DocToDocxConverter { public static void main(String[] args) throws Exception { // 源文档路径 String sourcePath = "source.doc"; // 目标文档路径 String targetPath = "target.docx"; FileInputStream fis = new FileInputStream(sourcePath); OPCPackage srcPackage = OPCPackage.open(fis); // 使用XWPFDocument读取文档内容 XWPFDocument srcDoc = new XWPFDocument(srcPackage); // 创建一个新的.docx文档 OPCPackage dstPackage = OPCPackage.create(targetPath); XWPFDocument dstDoc = new XWPFDocument(dstPackage); // 复制源文档的内容到目标文档 for (XWPFParagraph srcPara : srcDoc.getParagraphs()) { dstDoc.addParagraph().setParagraphSource(srcPara); } // 保存并关闭所有资源 dstPackage.save(); srcPackage.close(); fis.close(); dstDoc.close(); System.out.println("转换完成"); } } ``` 请注意,这只是一个基本的示例,实际使用时你可能需要处理更复杂的结构,如样式、表格等,并且确保处理异常。此外,Apache POI的API可能会有更新,所以确保检查最新的文档或教程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值