用java读取多种文件格式的文件(pdf,pptx,ppt,doc,docx..)

   本文通过开源pdfbox和poi进行处理多种文件格式的文本读入

 1.需要的jar的maven坐标:

     <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.2</version>
        </dependency>
        <!--  ppt,xls,docx,pptx,xlsx-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.14</version>
        </dependency>
        <dependency>
            <groupId>org.apache.xmlbeans</groupId>
            <artifactId>xmlbeans</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>

处理多种文件格式,详情见代码:

  1 package cn.lcg.utils;
  2
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.io.IOException;
  6 import java.text.NumberFormat;
  7 import java.util.List;
  8
  9 import org.apache.pdfbox.pdmodel.PDDocument;
 10 import org.apache.pdfbox.text.PDFTextStripper;
 11 import org.apache.poi.hslf.extractor.PowerPointExtractor;
 12 import org.apache.poi.hssf.usermodel.HSSFCell;
 13 import org.apache.poi.hssf.usermodel.HSSFRow;
 14 import org.apache.poi.hssf.usermodel.HSSFSheet;
 15 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 16 import org.apache.poi.hwpf.HWPFDocument;
 17 import org.apache.poi.hwpf.usermodel.Range;
 18 import org.apache.poi.ss.usermodel.Cell;
 19 import org.apache.poi.xslf.usermodel.XMLSlideShow;
 20 import org.apache.poi.xslf.usermodel.XSLFSlide;
 21 import org.apache.poi.xslf.usermodel.XSLFSlideShow;
 22 import org.apache.poi.xssf.usermodel.XSSFCell;
 23 import org.apache.poi.xssf.usermodel.XSSFRow;
 24 import org.apache.poi.xssf.usermodel.XSSFSheet;
 25 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 26 import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
 27 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 28 import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun;
 29 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;
 30 import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;
 31 import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape;
 32 import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
 33 import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide;
 34
 35 /**
 36  *
 37  * @author yujian
 38  * @date   2016年10月12日
 39  * @version 0.0.1
 40  */
 41 public class FileFormat {
 42     /**
 43      * 用来读取doc文件的方法
 44      * @param filePath
 45      * @return
 46      * @throws Exception
 47      */
 48     public static String getTextFromDoc(String filePath) throws Exception{
 49         StringBuilder sb = new StringBuilder();
 50             FileInputStream fis = new FileInputStream(new File(filePath));
 51             HWPFDocument doc = new HWPFDocument(fis);
 52             Range rang = doc.getRange();
 53             sb.append(rang.text());
 54             fis.close();
 55             return sb.toString();
 56
 57     }
 58     /**
 59      * 用来读取docx文件
 60      * @param filePath
 61      * @return
 62      * @throws IOException
 63      * @throws Exception
 64      */
 65     @SuppressWarnings("resource")
 66     public static String getTextFromDocx(String filePath) throws IOException {
 67         FileInputStream in = new FileInputStream(filePath);
 68         XWPFDocument doc = new XWPFDocument(in);
 69         XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
 70         String text = extractor.getText();
 71         in.close();
 72         return text;
 73     }
 74     /**
 75      * 用来读取pdf文件
 76      * @param filePath
 77      * @return
 78      * @throws IOException
 79      */
 80     public static String getTextFromPDF(String filePath) throws IOException{
 81             File input = new File(filePath);
 82             PDDocument pd = PDDocument.load(input);
 83             PDFTextStripper stripper = new PDFTextStripper();
 84             return stripper.getText(pd);
 85     }
 86     /**
 87      * 用来读取ppt文件
 88      * @param filePath
 89      * @return
 90      * @throws IOException
 91      */
 92     public static String getTextFromPPT( String filePath) throws IOException{
 93         FileInputStream in = new FileInputStream(filePath);
 94         PowerPointExtractor extractor = new PowerPointExtractor(in);
 95         String content = extractor.getText();
 96         extractor.close();
 97         return content;
 98     }
 99     /**
100      * 用来读取pptx文件
101      * @param filePath
102      * @return
103      * @throws IOException
104      */
105     public static String getTextFromPPTX( String filePath) throws IOException{
106         String resultString = null;
107         StringBuilder sb = new StringBuilder();
108         FileInputStream in = new FileInputStream(filePath);
109         try {
110             XMLSlideShow xmlSlideShow = new XMLSlideShow(in);
111             List<XSLFSlide> slides = xmlSlideShow.getSlides();
112             for(XSLFSlide slide:slides){
113                 CTSlide rawSlide = slide.getXmlObject();
114                 CTGroupShape gs = rawSlide.getCSld().getSpTree();
115                 CTShape[] shapes = gs.getSpArray();
116                 for(CTShape shape:shapes){
117                     CTTextBody tb = shape.getTxBody();
118                     if(null==tb){
119                         continue;
120                     }
121                     CTTextParagraph[] paras = tb.getPArray();
122                     for(CTTextParagraph textParagraph:paras){
123                         CTRegularTextRun[] textRuns = textParagraph.getRArray();
124                         for(CTRegularTextRun textRun:textRuns){
125                             sb.append(textRun.getT());
126                         }
127                     }
128                 }
129             }
130             resultString = sb.toString();
131             xmlSlideShow.close();
132         } catch (Exception e) {
133             e.printStackTrace();
134         }
135         return resultString;
136     }
137     /**
138      * 用来读取xls
139      * @param filePath
140      * @return
141      * @throws IOException
142      */
143     public static String getTextFromxls(String filePath) throws IOException{
144         FileInputStream in = new FileInputStream(filePath);
145         StringBuilder content = new StringBuilder();
146         HSSFWorkbook workbook = new HSSFWorkbook(in);
147         for(int sheetIndex=0;sheetIndex<workbook.getNumberOfSheets();sheetIndex++){
148             HSSFSheet sheet = workbook.getSheetAt(sheetIndex);
149             for(int rowIndex=0;rowIndex<=sheet.getLastRowNum();rowIndex++){
150                 HSSFRow row = sheet.getRow(rowIndex);
151                 if(row==null){
152                     continue;
153                 }
154                 for(int cellnum=0;cellnum<row.getLastCellNum();cellnum++){
155                     HSSFCell cell = row.getCell(cellnum);
156                     if(cell!=null){
157                         content.append(cell.getRichStringCellValue().getString()+" ");
158                     }
159
160                 }
161             }
162
163         }
164         workbook.close();
165         return content.toString();
166
167     }
168     /**
169      * 用来读取xlsx文件
170      * @param filePath
171      * @return
172      * @throws IOException
173      */
174     public static String getTextFromxlsx(String filePath) throws IOException{
175         StringBuilder content = new StringBuilder();
176         XSSFWorkbook workbook = new XSSFWorkbook(filePath);
177         for(int sheet=0;sheet<workbook.getNumberOfSheets();sheet++){
178             if(null!=workbook.getSheetAt(sheet)){
179                 XSSFSheet aSheet =workbook.getSheetAt(sheet);
180                 for(int row=0;row<=aSheet.getLastRowNum();row++){
181                     if(null!=aSheet.getRow(row)){
182                         XSSFRow aRow = aSheet.getRow(row);
183                         for(int cell=0;cell<aRow.getLastCellNum();cell++){
184                             if(null!=aRow.getCell(cell)){
185                                 XSSFCell aCell = aRow.getCell(cell);
186                                 if(convertCell(aCell).length()>0){
187                                     content.append(convertCell(aCell));
188                                 }
189                             }
190                             content.append(" ");
191                         }
192                     }
193                 }
194             }
195         }
196         workbook.close();
197         return content.toString();
198
199     }
200
201     private static String convertCell(Cell cell){
202         NumberFormat formater = NumberFormat.getInstance();
203         formater.setGroupingUsed(false);
204         String cellValue="";
205         if(cell==null){
206             return cellValue;
207         }
208
209         switch(cell.getCellType()){
210             case HSSFCell.CELL_TYPE_NUMERIC:
211                 cellValue = formater.format(cell.getNumericCellValue());
212                 break;
213             case HSSFCell.CELL_TYPE_STRING:
214                 cellValue = cell.getStringCellValue();
215                 break;
216             case HSSFCell.CELL_TYPE_BLANK:
217                 cellValue = cell.getStringCellValue();
218                 break;
219             case HSSFCell.CELL_TYPE_BOOLEAN:
220                 cellValue = Boolean.valueOf(cell.getBooleanCellValue()).toString();
221                 break;
222             case HSSFCell.CELL_TYPE_ERROR:
223                 cellValue = String.valueOf(cell.getErrorCellValue());
224                 break;
225             default:cellValue="";
226         }
227         return cellValue.trim();
228     }
229 }

解释的话就没有那么多时间,这些代码在我的项目中完全正确,所以你们可以放心使用。

时间: 2024-10-13 01:28:36

用java读取多种文件格式的文件(pdf,pptx,ppt,doc,docx..)的相关文章

java操作office和pdf文件java读取word,excel和pdf文档内容

在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应用.如果想深入了解原理.请读者自行研究一些相关源码. 首先我们来认识一下读取相关文档的jar包: 1. 引用POI包读取word文档内容 poi.jar 下载地址 http://apache.freelamp.com/poi/release/bin/poi-bin-3.6-20091214.zip 

Java读取Level-1行情dbf文件极致优化(3)

最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1行情没有Level-2快,但是作为系统支持的行情源,我们还是需要优化它,使得从文件读取,到用户通过socket收到行情,端到端的时延尽可能的低.本文主要介绍对level-1行情dbf文件读取的极致优化方案.相信对其他的dbf文件读取应该也有借鉴意义. Level-1行情是由行情小站,定时每隔几秒把d

Java读取Level-1行情dbf文件极致优化(2)

最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1行情没有Level-2快,但是作为系统支持的行情源,我们还是需要优化它,使得从文件读取,到用户通过socket收到行情,端到端的时延尽可能的低.本文主要介绍对level-1行情dbf文件读取的极致优化方案.相信对其他的dbf文件读取应该也有借鉴意义. Level-1行情是由行情小站,定时每隔几秒把d

java 读取并且显示 txt 文件

系统:mac os x 10.9 eclipse 在eclipse 中建立一个project, 命名为Cin_txt, Cin_txt的内容 test wang hello world 以下是输入的代码 import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class Cin_txt { public static void main(String[] args) { Fil

java读取UTF-8的txt文件发现开头的一个字符问题

今天遇到一个奇葩问题,在读取一个TXT文件时,出现开头多了一个问号(?).如下图: 莫名奇妙的多了一个.最后通过网上资料,知道在Java中,class文件采用utf8的编码方式,JVM运行时采用utf16.Java的字符串是永远都是unicode的,采用的是UTF-16的编码方式. 想测试一下,java对UTF-8文件的读写的能力,结果发现了一个很郁闷的问题,如果通过java写的UTF-8文件,使用Java可以正确的读,但是如果用记事本将相同的内容使用UTF-8格式保存,则在使用程序读取是会从文

Java 读取jar内的文件的超简便方法

坑爹的java课程设计,偏要用jar来运行 读取.存储jar内文件的支持也好低 存储方法: 进入jar文件其实没有说的那么困难,jar文件本质是一个zip格式的压缩文件,只是把文件后缀名改了,要用Java读取里面的文件也没有那么想象的那么困难.使用相关协议就可以: 例如:c盘根目录有一个test.jar文件文件里面有个a.txt文件我们就读取这个a.txt文件 文件对应的URL: jar:file:/C:/test.jar!/a.txt 1 import java.io.IOException;

java读取txt/pdf/xls/xlsx/doc/docx/ppt/pptx

环境准备txt利用common-iopdf利用pdfbox剩下的用POI关于POI,读取xls没啥特别的,主要是读取doc和ppt,需要下载poi源代码,然后将poi-src-3.7-20101029.zip\poi-3.7\src\scratchpad\src下的所有文件copy到工程,或者自己封装个jar包jar包依赖 code如下:package test; import java.io.BufferedInputStream;import java.io.File;import java

(IO流)java中多种方式读文件,追加文件内容,对文件的各种操作

import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.io.R

Java读取配置文件方法及文件路径注意事项

一.方法请见代码中的注释说明,需要注意的就是对于文件路径的读取方式,不同的方法,对路径的解释是不一样的. 1 package com.yard39.ProperTiesFileReader.Test; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java