java 读取word (不带格式)




 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
 <dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi</artifactId>
     <version>3.16</version>
 </dependency>
   
   <!--读取word所需依赖  -->
   <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
 <dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi-ooxml</artifactId>
     <version>3.16</version>
 </dependency>
   
   <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad -->
 <dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi-scratchpad</artifactId>
     <version>3.16</version>
 </dependency>
   <!--读取word所需依赖  -->


代码:

package springTimer;

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

import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;

import springTimer.util.CharIndexUtil;

public class testReadDocx {

 
  /**
     * 读取word文件内容
     * 
     * @param path
     * @return buffer
     */ 
 
    public static String readWord(String path) { 
        String buffer = ""; 
        try { 
            if (path.endsWith(".doc")) { 
                InputStream is = new FileInputStream(new File(path)); 
                WordExtractor ex = new WordExtractor(is); 
                buffer = ex.getText(); 
                ex.close(); 
            } else if (path.endsWith("docx")) { 
                OPCPackage opcPackage = POIXMLDocument.openPackage(path); 
                POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage); 
                buffer = extractor.getText(); 
                extractor.close(); 
            } else { 
                System.out.println("此文件不是word文件!"); 
            } 
 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
 
        return buffer; 
    } 
   
   
   
    public static void main(String[] args) {
  
     List<File> files = DocumentUtil.getFiles("E:\\zhenglilunbotu\\testdocx\\");
     for (File file : files) {
      
      String path = file.getPath();
      String name = file.getName();
      int indexOf = name.indexOf(".");
      String substring = name.substring(indexOf);
      if(".docx".equals(substring)){
       System.out.println(path);
       
       String content = testReadDocx.readWord(path);
       System.out.println("content===="+content);
            
            
             int index1 = CharIndexUtil.getCharacterPosition(content, ":", 5);
             int index2 = CharIndexUtil.getCharacterPosition(content, ":", 6);
             int index3 = CharIndexUtil.getCharacterPosition(content, ":", 7);

             String sc = content.substring(index1+1, index2-4);
             String jl = content.substring(index2+1, index3-4);
             String ry = content.substring(index3+1);
             System.out.println(sc);
             System.out.println(jl);
             System.out.println(ry);
      }else if(".png".equals(substring)){
       System.out.println(path);
      }
      
  }
 }
}


package springTimer;

import java.io.File;
import java.util.ArrayList;
import java.util.List;


//遍历文件夹下的所有文件
public class DocumentUtil {

 //path:文件的地址  例如:D:\\videoUpload
 public static List<File> getFiles(String path){
     File root = new File(path);
     List<File> files = new ArrayList<File>();
     if(!root.isDirectory()){
         files.add(root);
     }else{
         File[] subFiles = root.listFiles();
         for(File f : subFiles){
             files.addAll(getFiles(f.getAbsolutePath()));
         }   
     }
     return files;
 }
}


package springTimer;

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

import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;

import springTimer.util.CharIndexUtil;

public class testReadDocx {

 
  /**
     * 读取word文件内容
     * 
     * @param path
     * @return buffer
     */ 
 
    public static String readWord(String path) { 
        String buffer = ""; 
        try { 
            if (path.endsWith(".doc")) { 
                InputStream is = new FileInputStream(new File(path)); 
                WordExtractor ex = new WordExtractor(is); 
                buffer = ex.getText(); 
                ex.close(); 
            } else if (path.endsWith("docx")) { 
                OPCPackage opcPackage = POIXMLDocument.openPackage(path); 
                POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage); 
                buffer = extractor.getText(); 
                extractor.close(); 
            } else { 
                System.out.println("此文件不是word文件!"); 
            } 
 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
 
        return buffer; 
    } 
   
   
   
    public static void main(String[] args) {
  
     List<File> files = DocumentUtil.getFiles("E:\\zhenglilunbotu\\testdocx\\");
     for (File file : files) {
      
      String path = file.getPath();
      String name = file.getName();
      int indexOf = name.indexOf(".");
      String substring = name.substring(indexOf);
      if(".docx".equals(substring)){
       System.out.println(path);
       
       String content = testReadDocx.readWord(path);
       System.out.println("content===="+content);
            
            
             int index1 = CharIndexUtil.getCharacterPosition(content, ":", 5);
             int index2 = CharIndexUtil.getCharacterPosition(content, ":", 6);
             int index3 = CharIndexUtil.getCharacterPosition(content, ":", 7);

             String sc = content.substring(index1+1, index2-4);
             String jl = content.substring(index2+1, index3-4);
             String ry = content.substring(index3+1);
             System.out.println(sc);
             System.out.println(jl);
             System.out.println(ry);
      }
      
  }
 }
}



word文件

   名:张三

   院:*医院

   室:*内科

   称:*医师

擅长领域:治疗内科常见病、多发病,对心脑血管、胃肠、妇科等病中医药治疗有专长。

执业经历:教授,*************,河北*人。19*年至今在*****医院中医科从事临床医疗、教学、科研工作。

所获荣誉:20*年开展的《*实验研究》获*一等奖(*主研人),发表*5篇,撰写著作6部。








要使用 Java **读取 Word 文档内容并返回纯文本(格式)**,推荐使用 Apache POI 库来解析 `.docx` 文件,并提取其中的文本内容,去除所有样式、字体、表格结构等格式信息。 --- ## ✅ 目标 > 读取 `.docx` 文件 → 提取全部文字 → 合并为一段无格式的字符串(纯文本) --- ## ✅ 解决方案:使用 Apache POI ### 1. 添加 Maven 依赖 ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.5</version> </dependency> ``` > ✅ 支持 `.docx` 格式支持旧版 `.doc`,如需支持请用 `HWPF`) --- ### 2. Java 代码实现:读取 Word 内容并转为纯文本 ```java import org.apache.poi.xwpf.usermodel.*; import java.io.FileInputStream; import java.util.List; public class WordToPlainText { public static String extractTextFromDocx(String filePath) throws Exception { StringBuilder text = new StringBuilder(); try (FileInputStream fis = new FileInputStream(filePath); XWPFDocument document = new XWPFDocument(fis)) { // 遍历段落 for (XWPFParagraph paragraph : document.getParagraphs()) { String paraText = paragraph.getText(); if (paraText != null && !paraText.trim().isEmpty()) { text.append(paraText).append("\n"); } } // 遍历表格 for (XWPFTable table : document.getTables()) { for (XWPFTableRow row : table.getRows()) { for (XWPFTableCell cell : row.getTableCells()) { for (XWPFParagraph paragraph : cell.getParagraphs()) { String paraText = paragraph.getText(); if (paraText != null && !paraText.trim().isEmpty()) { text.append(paraText).append(" "); } } } } text.append("\n"); // 表格后换行 } } return text.toString().trim(); // 去除首尾空白 } // 使用示例 public static void main(String[] args) { try { String plainText = extractTextFromDocx("example.docx"); System.out.println("提取的纯文本内容:\n" + plainText); } catch (Exception e) { e.printStackTrace(); } } } ``` --- ## 🔍 代码说明 | 功能 | 说明 | |------|------| | `document.getParagraphs()` | 获取所有段落文本 | | `paragraph.getText()` | 自动合并该段中所有 runs(文字块),忽略加粗、斜体等 | | `document.getTables()` | 遍历每个表格,提取单元格中的段落 | | `\n` 分隔 | 段落之间用换行分隔,保持基本可读性 | | 返回值 | 一个包含全文的字符串,**无任何格式** | --- ## ✅ 示例输出(纯文本) 假设原 Word 包含: - 加粗标题:“审理报告” - 正文:“本案事实清楚……” - 一个表格中有“被告人:张三” 输出结果为: ``` 审理报告 本案事实清楚…… 被告人:张三 ``` ✅ 所有字体、颜色、大小、对齐方式、下划线等均被丢弃,只保留文字内容。 --- ## ⚠️ 注意事项 | 问题 | 建议 | |------|------| | 支持 `.doc` 文件 | 如需支持,请使用 `HWPF` 子项目(仅限老版本) | | 图片、图表内容会被读取 | Apache POI 提取图片中的文字(OCR 需额外工具) | | 特殊符号或编号可能乱码 | 确保系统编码为 UTF-8 | | 大文件可能导致内存溢出 | 对大文件建议流式处理或限制大小 | --- ## ✅ 进阶:更彻底地去格式化 如果你希望进一步简化(比如去掉多余空格、合并空白行),可以添加清洗逻辑: ```java public static String cleanText(String text) { return text.replaceAll("\\s+", " ") // 多个空白字符合并为一个空格 .replaceAll("[\\r\\n]+", "\n") // 多个换行合并为一个 .trim(); } ``` --- ## ✅ 总结 你现在可以通过以下步骤实现“读取 Word 内容格式”: 1. 使用 `Apache POI` 的 `XWPFDocument` 2. 遍历段落和表格,调用 `.getText()` 3. 拼接成字符串,去除多余空白 4. 返回纯文本 完全满足需求:✅ **只保留文字,去除一切格式** ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值