文件内容读取工具类,亲测可用

maven依赖:

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.16</version>
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.16</version>
</dependency> <dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.6.0</version>
</dependency> <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency>

工具类:

import org.apache.commons.io.FileUtils;
import org.apache.pdfbox.io.RandomAccessBuffer;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hslf.extractor.PowerPointExtractor;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.xmlbeans.XmlException; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; /**
* @author wangshuaijun
* @description
* 读取文件工具类:支持以下文件内容读取
* 1. word(.doc),word(.docx)
* 2. excel(.xls),excel(xlsx)
* 3. pdf
* 4. txt
* 5. ppt(.ppt),pptx(,pptx)
* @date 2019年4月19日10:52:45
*
*/
public class ReadFileUtils { /**
* 根据文件类型返回文件内容
* @param filepath
* @return
* @throws IOException
*/
public static String getContentByPath(String filepath) throws IOException{
String []fileTypeArr=filepath.split( "\\." );
String fileType=fileTypeArr[fileTypeArr.length-1];
if("doc".equals( fileType ) || "docx".equals( fileType )){
return readWord( filepath,fileType );
}else if("xlsx".equals( fileType ) || "xls".equals( fileType )){
return readExcel( fileType,filepath );
}else if("txt".equals( fileType )){
return readTxt(filepath);
}else if("pdf".equals( fileType )){
return readPdf(filepath);
}else if("ppt".equals( fileType ) || "pptx".equals( fileType )){
return readPPT(fileType,filepath);
}else{
System.out.println("不支持的文件类型!");
}
return "";
} /**
* 读取PDF中的内容
* @param filePath
* @return
*/
public static String readPdf(String filePath){
FileInputStream fileInputStream=null;
PDDocument pdDocument=null;
String content="";
try {
//创建输入流对象
fileInputStream = new FileInputStream(filePath);
//创建解析器对象
PDFParser pdfParser = new PDFParser(new RandomAccessBuffer(fileInputStream));
pdfParser.parse();
//pdf文档
pdDocument = pdfParser.getPDDocument();
//pdf文本操作对象,使用该对象可以获取所读取pdf的一些信息
PDFTextStripper pdfTextStripper = new PDFTextStripper();
content = pdfTextStripper.getText(pdDocument);
}catch(IOException e){
e.printStackTrace();
}finally{
try {
//PDDocument对象时使用完后必须要关闭
if(null!=pdDocument){
pdDocument.close();
}
if(null!=fileInputStream){
fileInputStream.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
return content;
} /**
* 读取Excel中的内容
* @param filePath
* @return
* @throws IOException
*/
private static String readTxt(String filePath) throws IOException{
File f = new File(filePath);
return FileUtils.readFileToString( f,"GBK" );
} /**
* 读取Excel中的内容
* @param filePath
* @return
*/
private static String readExcel(String fileType,String filePath){ try {
File excel = new File(filePath);
if (excel.isFile() && excel.exists()) { //判断文件是否存在
Workbook wb;
//根据文件后缀(xls/xlsx)进行判断
if ( "xls".equals(fileType)){
FileInputStream fis = new FileInputStream(excel); //文件流对象
wb = new HSSFWorkbook(fis);
}else if ("xlsx".equals(fileType)){
wb = new XSSFWorkbook(excel);
}else {
System.out.println("文件类型错误!");
return "";
}
//开始解析,获取页签数
StringBuffer sb=new StringBuffer("");
for(int i=0;i<wb.getNumberOfSheets();i++){
Sheet sheet = wb.getSheetAt(i); //读取sheet
sb.append( sheet.getSheetName() +"_");
int firstRowIndex = sheet.getFirstRowNum()+1; //第一行是列名,所以不读
int lastRowIndex = sheet.getLastRowNum();
for(int rIndex = firstRowIndex; rIndex <= lastRowIndex; rIndex++) { //遍历行
Row row = sheet.getRow(rIndex);
if (row != null) {
int firstCellIndex = row.getFirstCellNum();
int lastCellIndex = row.getLastCellNum();
for (int cIndex = firstCellIndex; cIndex < lastCellIndex; cIndex++) { //遍历列
Cell cell = row.getCell(cIndex);
if (cell != null) {
sb.append( cell.toString());
}
}
}
}
}
return sb.toString();
} else {
System.out.println("找不到指定的文件");
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
} /**
* 读取word中的内容
* @param path
* @param fileType
* @return
*/
public static String readWord(String path,String fileType) {
String buffer = "";
try {
if ("doc".equals( fileType )) {
InputStream is = new FileInputStream(new File(path));
WordExtractor ex = new WordExtractor(is);
buffer = ex.getText();
ex.close();
} else if ("docx".equals( fileType )) {
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;
} private static String readPPT(String fileType,String filePath) {
try {
if("ppt".equals( fileType )){
PowerPointExtractor extractor=new PowerPointExtractor(new FileInputStream( new File( filePath )));
return extractor.getText();
} else if("pptx".equals( fileType )){
return new XSLFPowerPointExtractor(POIXMLDocument.openPackage(filePath)).getText();
}
}catch (IOException e){
e.fillInStackTrace();
}catch(XmlException e){
e.getMessage();
}catch(OpenXML4JException e){
e.getMessage();
} return "";
}

工具类_JavaPOI_Office文件内容读取的更多相关文章

  1. excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)

    将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...

  2. Properties类对于文件的读取和写入

    Properties类表示一个持久的属性集.Properties可保存在流中或从流中加载.Properties对象只能加载以 .Properties 为后缀的文件(文件我创建在src下). 开始时文件 ...

  3. 【转载】ASP.NET工具类:文件夹目录Directory操作工具类

    在ASP.NET开发网站的过程中,有时候会涉及到文件夹相关操作,如判断文件夹目录是否存在.删除文件夹目录.创建文件.删除文件.复制文件夹等等.这一批有关文件目录的操作可以通过Directory类.Fi ...

  4. Java将字符串写入文件与将文件内容读取到字符串

    原文:http://blog.csdn.net/liuweiyuxiang/article/details/69487326 将字符串写入文件 方法一 public void WriteStringT ...

  5. ios本地文件内容读取,.json .plist 文件读写

    ios本地文件内容读取,.json .plist 文件读写 本地文件.json .plist文件是较为常用的存储本地数据的文件,对这些文件的操作也是一种常用的基础. 本文同时提供初始化变量的比较标准的 ...

  6. 文件压缩、解压工具类。文件压缩格式为zip

    package com.JUtils.file; import java.io.BufferedOutputStream; import java.io.File; import java.io.Fi ...

  7. FastDFS 工具类实现文件上传_02

    一.jar 包 jar包下载:https://pan.baidu.com/s/1nwkAHU5 密码:tlv6 或者 下载工程,安装到 maven 本地仓库 工程下载:https://pan.baid ...

  8. ca75a_c++_标准IO库-利用流对象把文件内容读取到向量-操作文件

    /*ca75a_c++_标准IO库习题练习习题8.3,8.4,8.6习题8.9.8.10 ifstream inFile(fileName.c_str());1>d:\users\txwtech ...

  9. robotframework 测试工具添加PDF文件内容匹配插件

    robotframework  这个需要了解的请度娘.本文实现的是一个小功能.大体分为如下几个步骤 1)给定一个pdf文件. 2)读取pdf文件内容,并解析为文本内容. 3)通过给定的内容,比对pdf ...

随机推荐

  1. OSI协议与TCP\IP协议之间的关系

    OSI协议 TCP\IP协议 五层协议(学习参考) 应用层 应用层 应用层 表示层 会话层 运输层 运输层 运输层 网络层 网络层 网络层 数据链路层 网络接口层 数据链路层 物理层 物理层 基于五层 ...

  2. 'vue' 不是内部或外部命令

    运用cnpm淘宝镜像安装vue-cli,然后输入vue,显示“'vue' 不是内部或外部命令”,然后百度查找方法,解决办法如下: 虽然电脑是64位的电脑,然后node我也下载安装的是64位,然后,我重 ...

  3. HANA数据库无法停止

    Symptom: 使用命令HDB stop多次,每次报错为timeout ----------------------- sdpadm@PRDDB01:/usr/sap/SDP/HDB66/prder ...

  4. cookie和session以及iOS cookie的查取

    Cookie的工作原理 http是无状态的,这是什么意思呢?就是说,在没有cookie之前,你第一次访问这个页面和第二次访问这个页面, 服务器是不知道的,不知道前一次是你.那么问题来了,我怎么登录,登 ...

  5. Java集合框架介绍。Java Collection Frameworks = JCF

    Java集合框架 = Java Collection Frameworks  = JCF . 为了方便理解,我画了一张思维脑图.

  6. django_rest framework 接口开发(一)

    1 restful 规范(建议) 基于FbV def order(request): if request.method=="GET": return HttpResponse(' ...

  7. Flask之Local、LocalStack和LocalProxy

    在我们使用Flask以及Werkzeug框架的过程中,经常会遇到如下三个概念:Local.LocalStack和LocalProxy.尤其在学习Flask的Request Context和App Co ...

  8. git 添加码云远程仓库和上传到码云的命令

     添加远程仓库 git remote add Zk  仓库地址.git 查看远程仓库 git remote -v 上传远程仓库 git push Zk master 删除远程仓库Zkgit remot ...

  9. Linux命令——killall 、kill 、pkill、xkill

    参考:killall .kill .pkill 命令详解 Using kill, killall, and pkill 4 Ways to Kill a Process – kill, killall ...

  10. Linux:入门基础

    一.操作Linux必知必会基础知识 二.在Linux命令下查看命令帮助信息 三.Linux挂机重启注销命令 四.Linux显示系统IP地址 一.操作Linux必知必会基础知识 1.Linux命令行组成 ...