工具类_JavaPOI_Office文件内容读取
文件内容读取工具类,亲测可用
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文件内容读取的更多相关文章
- excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)
将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...
- Properties类对于文件的读取和写入
Properties类表示一个持久的属性集.Properties可保存在流中或从流中加载.Properties对象只能加载以 .Properties 为后缀的文件(文件我创建在src下). 开始时文件 ...
- 【转载】ASP.NET工具类:文件夹目录Directory操作工具类
在ASP.NET开发网站的过程中,有时候会涉及到文件夹相关操作,如判断文件夹目录是否存在.删除文件夹目录.创建文件.删除文件.复制文件夹等等.这一批有关文件目录的操作可以通过Directory类.Fi ...
- Java将字符串写入文件与将文件内容读取到字符串
原文:http://blog.csdn.net/liuweiyuxiang/article/details/69487326 将字符串写入文件 方法一 public void WriteStringT ...
- ios本地文件内容读取,.json .plist 文件读写
ios本地文件内容读取,.json .plist 文件读写 本地文件.json .plist文件是较为常用的存储本地数据的文件,对这些文件的操作也是一种常用的基础. 本文同时提供初始化变量的比较标准的 ...
- 文件压缩、解压工具类。文件压缩格式为zip
package com.JUtils.file; import java.io.BufferedOutputStream; import java.io.File; import java.io.Fi ...
- FastDFS 工具类实现文件上传_02
一.jar 包 jar包下载:https://pan.baidu.com/s/1nwkAHU5 密码:tlv6 或者 下载工程,安装到 maven 本地仓库 工程下载:https://pan.baid ...
- 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 ...
- robotframework 测试工具添加PDF文件内容匹配插件
robotframework 这个需要了解的请度娘.本文实现的是一个小功能.大体分为如下几个步骤 1)给定一个pdf文件. 2)读取pdf文件内容,并解析为文本内容. 3)通过给定的内容,比对pdf ...
随机推荐
- [ICCV 2019] Weakly Supervised Object Detection With Segmentation Collaboration
新在ICCV上发的弱监督物体检测文章,偷偷高兴一下,贴出我的poster,最近有点忙,话不多说,欢迎交流- https://arxiv.org/pdf/1904.00551.pdf http://op ...
- php中的特殊标签
参考:https://www.freebuf.com/column/212586.html 今天看到这篇文章讲到了ctf中的一些关于php标签的小姿势,我虽然不打ctf,但是平常做php的代码审计也经 ...
- Nginx跨域访问场景配置和防盗链
跨域访问控制 跨域访问 为什么浏览器禁止跨域访问 不安全,容易出现CSRF攻击! 如果黑客控制的网站B在响应头里添加了让客户端去访问网站A的恶意信息,就会出现CSRF攻击 Nginx如何配置跨域访问 ...
- 【leetcode】266. Palindrome Permutation
原题 Given a string, determine if a permutation of the string could form a palindrome. For example, &q ...
- Hive数据库操作
Hive数据结构 除了基本数据类型(与java类似),hive支持三种集合类型 Hive集合类型数据 array.map.structs hive (default)> create table ...
- 18计科学期总成绩明细 && 小黄衫团队预选
1.个人所有作业+团队作业总得分排名 2.千帆竞发图 3.各团队每次作业得分汇总 根据团队成绩排名,众志陈成队得分最高,预选为小黄衫团队. 对团队成绩有异议的团队,请在成绩预选发布后的两天内私信助教解 ...
- Visual Studio C# 利用git和github协同开发时产生冲突的解决办
Visual Studio C# 利用git和Github协同开发时产生冲突的解决办法 前言:在前两天的助教作业中,发现了自己没有办法解决在用vs开发C#的窗体项目的过程中产生的冲突问题,在查阅了资料 ...
- FM系列
在计算广告中,CTR是非常重要的一环.对于特征组合来说,业界通用的做法主要有两大类:FM系列和Tree系列.这里我们来介绍一下FM系列. 在传统的线性模型中,每个特征都是独立的,如果需要考虑特征与特征 ...
- JavaScript-Clipper.js
Clipper.js下载地址:https://sourceforge.net/projects/jsclipper/files/latest/download使用Javascript Clipper库 ...
- 14 webpack中url-loader的使用
默认情况下,webpack无法处理css文件中的url地址,不管是图片还是字体库,只要是URL地址,都处理不了,需要第三方loader 1.安装loader cnpm i url-loader fil ...