Word,Excel,pdf,txt等文件上传并提取内容
近期项目需求:1.要用到各种文件上传,下载。
2.并对文件进行搜索。
3.仅仅要文件里包括有搜索的内容,所有显示出来。
今天正好有时间整理一下,方便以后阅读,及对须要用到的朋友提供微薄之力。首先在实现文件上传时,使用的struts2自带的文件上传功能,通过流的方式将文件保存,在下载的时候通过流的方式写出就可以。这个实现起来不是非常难,主要是对各种文件内容的提取比較麻烦,比方word,excel,pdf等文件,不能使用普通的BufferedReader,BufferedWriter等流的方式读写提取,由于这些文件的格式不是普通的文本,他们有自定义的格式,必须使用他们自己提供的jar包进行操作,Word,Excel使用的是Apache提供的poi进行操作,当然在操作的过程中要注意一些使用的方法,比方Word,Excel有不同的版本号,操作的方式也不同,这里会出现非常多问题,在上一篇中我整理了一些,我在操作过程出现的问题,并提供了解决方式,还有提供了本人操作这些文件的源代码,下载就可以使用。
一下是我在操作过程用到的具体信息:
struts.xml配置:
<action name="upload" class="lucenesAction" method="upload">
<!-- 此处能够限制上传文件类型
<interceptor-ref name="fileUpload">
上传单个文件的大小
<param name="maximumSize">500000</param>
文件的扩展名
<param name="allowedExtensions">.jsp</param>
文件的类型
<param name="allowedTypes">image/pjpeg,image/gif,text/xml,text/plain,application/msword,application/vnd.ms-excel</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/> -->
<result name="input">/demo/lucenes/upload_fail.jsp</result>
<result name="success">/demo/lucenes/upload_ok.jsp</result>
</action>
Action中用到的操作文件信息:
//下载使用的流
public InputStream tInputStream;
// 上传文件,必须的三个字段。
private File data;
// 文件名称
private String dataFileName;
// 文件类型
private String dataContentType;
//省略set/get.............
Word操作类:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.hwpf.usermodel.CharacterProperties;
import org.apache.poi.hwpf.usermodel.HWPFList;
import org.apache.poi.hwpf.usermodel.ParagraphProperties;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.junit.Test;
/**
* 提取word内容
*
* @author wangshouhai
* @Version 2014-4-17:下午12:07:04
*/
public class ReadWord {
public static void main(String[] args) {
File file = new File("C:\\Users\\Administrator\\Desktop\\測试文档.docx");
// readWord2003(file);
readWord2007(file);
}
/**
* 支持word-2003
*
* @param args
*/
private static void readWord2003(File file) {
try {
FileInputStream fis = new FileInputStream(file);
// 创建WordExtractor对象
WordExtractor wordExtractor = new WordExtractor(fis);
// 取得全部文本内容
String text = wordExtractor.getText();
System.out.println("readWord2003--------------->"+text);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
// 支持word-2003
public static void readWordExtractor(File file) {
try {
FileInputStream fis = new FileInputStream(file);
// 创建WordExtractor对象
WordExtractor wordExtractor = new WordExtractor(fis);
// 通过getParagraphText()提取每一个段落
String[] paragraph = wordExtractor.getParagraphText();
System.out.println("该Word文件共同拥有" + paragraph.length + "段。");
for (int i = 0; i < paragraph.length; i++) {
System.out.println("readWordExtractor--------------->"+paragraph[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* word 2007解决方式
*
* @param args
*/
@Test
public static void readWord2007(File file) {
try {
// word 2007,读取word中字符
OPCPackage opcPackage = POIXMLDocument.openPackage("D:\\apache-tomcat-6.0.18\\webapps\\GOVWBWeb\\upload\\user\\2014\\04\\18\\08\\193b299f-e8fc-4a32-a7ba-f951beeec1d9");
POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);
String text2007 = extractor.getText();
System.out.println("readWord2007--------------->"+text2007);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Excel操作类:
import java.io.File;
import java.io.FileInputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* 读取excel内容
* @author wangshouhai
* @Version 2014-4-18:下午12:56:23
*/
public class ReadExcel {
// 文件上传
public static void readExcel2007(File file) {
try {
// 创建工作区,读取上传文件
XSSFWorkbook wb= new XSSFWorkbook(new FileInputStream(file));
XSSFSheet sheet =wb.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows();// 获取全部的行
if (rows > 0) {
for (int i = 1; i < rows; i++) {
XSSFRow row=sheet.getRow(i);
if (row == null) {
continue;
}
try {
XSSFCell idCell = row.getCell(0);
if (idCell != null) {
double id = idCell.getNumericCellValue();
//int id = Integer.parseInt(idCell.getRichStringCellValue().toString());
System.out.println("id----------->"+id);
}
// 账号
XSSFCell accountsCell = row.getCell(1);
String accounts = null;
if (accountsCell != null) {
accounts = accountsCell.getRichStringCellValue().toString();
System.out.println("accounts----------->"+accounts);
}
// password
XSSFCell passwordCell = row.getCell(2);
if (passwordCell != null) {
String password = passwordCell.getRichStringCellValue().toString();
System.out.println("password----------->"+password);
}
// 姓名
XSSFCell nameCell = row.getCell(3);
if (nameCell != null) {
String name = nameCell.getRichStringCellValue().toString();
System.out.println("name----------->"+name);
}
// 性别
XSSFCell sexCell = row.getCell(4);
if (sexCell != null) {
double sex = idCell.getNumericCellValue();
//String sex = sexCell.getRichStringCellValue().toString();
//int sexs = Integer.parseInt(sex);
System.out.println("sex----------->"+sex);
}
// 邮箱
XSSFCell emailCell = row.getCell(5);
if (emailCell != null) {
String email = emailCell.getRichStringCellValue().toString();
System.out.println("email----------->"+email);
}
// 手机
XSSFCell phoneCell = row.getCell(6);
if (phoneCell != null) {
String phone = phoneCell.getRichStringCellValue().toString();
System.out.println("phone----------->"+phone);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void readExcel2003(File file) {
try {
// 创建工作区,读取上传文件
Workbook wb = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = wb.getSheetAt(0);
int rows = sheet.getPhysicalNumberOfRows();// 获取全部的行
if (rows > 0) {
for (int i = 1; i < rows; i++) {
//获取每一行
HSSFRow row = (HSSFRow) sheet.getRow(i);
if (row == null) {
continue;
}
try {
//获取列数開始
HSSFCell idCell = row.getCell(0);
if (idCell != null) {
double id = idCell.getNumericCellValue();
// int id =
// Integer.parseInt(idCell.getRichStringCellValue().toString());
System.out.print("id: "+id+",");
}
// 账号
HSSFCell accountsCell = row.getCell(1);
String accounts = null;
if (accountsCell != null) {
accounts = accountsCell.getRichStringCellValue().toString();
System.out.print("accounts: "+accounts+",");
}
// password
HSSFCell passwordCell = row.getCell(2);
if (passwordCell != null) {
String password = passwordCell.getRichStringCellValue().toString();
System.out.print("password: "+password+",");
}
// 姓名
HSSFCell nameCell = row.getCell(3);
if (nameCell != null) {
String name = nameCell.getRichStringCellValue().toString();
System.out.print("name: "+name+",");
}
// 性别
HSSFCell sexCell = row.getCell(4);
if (sexCell != null) {
double sex = idCell.getNumericCellValue();
// String sex =
// sexCell.getRichStringCellValue().toString();
// int sexs = Integer.parseInt(sex);
System.out.print("sex: "+sex+",");
}
// 邮箱
HSSFCell emailCell = row.getCell(5);
if (emailCell != null) {
String email = emailCell.getRichStringCellValue().toString();
System.out.print("email: "+email+",");
}
// 手机
HSSFCell phoneCell = row.getCell(6);
if (phoneCell != null) {
String phone = phoneCell.getRichStringCellValue().toString();
System.out.println("phone: "+phone);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 读取Excel2007
* @param args
*/
public static void main(String[] args) {
File file = new File("D:\\apache-tomcat-6.0.18\\webapps\\GOVWBWeb\\upload\\user\\2014\\04\\18\\11\\adcc6bc6-bd5e-43e9-9a53-3ba879dfa62d.xlsx");
//readExcel2007(file);
readExcel2003(new File("C:\\Users\\Administrator\\Desktop\\export.xls"));
}
}
Pdf操作类:
import java.io.FileInputStream;
import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
/**
* 提取pdf中的内容
* @author wangshouhai
* @Version 2014-4-18:下午12:47:27
*/
public class ReadPdf {
public String readFdf(String file) {
try {
PDFParser parser = new PDFParser(new FileInputStream(file));
parser.parse();
COSDocument doc=parser.getDocument();
PDFTextStripper stripper = new PDFTextStripper();
String docText = stripper.getText(new PDDocument(doc));
docText= convertorSymbol(docText);
return docText;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 处理特殊字符
*
* @param sub
* @param docText
*/
public static String convertorSymbol(String docText) {
StringBuilder sub = new StringBuilder();
char[] ch = docText.toCharArray();
for (int i = 0; i < ch.length; i++) {
char buf = ch[i];
if (9 == buf || 10 == buf || 13 == buf || 32 <= buf && !Character.isISOControl(buf)) {
sub.append(buf);
}
}
return sub.toString().replaceAll("\\s*", "");
}
public static void main(String args[]) {
String text =new ReadPdf().readFdf("D:\\html2.pdf");
System.out.println("ReadPdf---------->"+text);
}
}
文本操作类:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class ReadText {
/**
* 读取文本内容
*
* @param dataFile
* @return
*/
public static String readText(File file) {
StringBuilder sub = new StringBuilder();
BufferedReader bufReader = null;
try {
bufReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));
String str;
while ((str = bufReader.readLine()) != null) {
sub.append(str);
}
return convertorSymbol(sub.toString());
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (bufReader != null) {
try {
bufReader.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
/**
* 处理特殊字符
*
* @param sub
* @param docText
*/
public static String convertorSymbol(String docText) {
StringBuilder sub = new StringBuilder();
char[] ch = docText.toCharArray();
for (int i = 0; i < ch.length; i++) {
char buf = ch[i];
if (9 == buf || 10 == buf || 13 == buf || 32 <= buf && !Character.isISOControl(buf)) {
sub.append(buf);
}
}
return sub.toString();
}
public static void main(String[] args) {
File file = new File("C:/Users/Administrator/Desktop/异常信息列表.txt");
String text = readText(file);
System.out.println("text-->"+text);
}
}
Word,Excel,pdf,txt等文件上传并提取内容的更多相关文章
- Struct2 csv文件上传读取中文内容乱码
网络上搜索下,发现都不适合 最终改写代码: FileInputStream fis = null; InputStreamReader isr = null; BufferedReader br= n ...
- 文件上传bypass jsp内容检测的一些方法
bx2=冰蝎2 前段时间渗透遇到了个检测jsp内容的,然后发现全unicode编码就可以绕过,但是对bx2马进行全编码他出现了一些错误,我尝试简单改了下,日站还是bx2操作舒服点 检测内容的话,这样直 ...
- springboot整合ueditor实现图片上传和文件上传功能
springboot整合ueditor实现图片上传和文件上传功能 写在前面: 在阅读本篇之前,请先按照我的这篇随笔完成对ueditor的前期配置工作: springboot+layui 整合百度富文本 ...
- 利用百度编辑器和IIS限制文件上传的大小
1.百度编辑器的大小限制 针对不同的文件类型限制大小 例如图片是imageMaxSize ,依次类推 /* 前后端通信相关的配置,注释只允许使用多行方式 */ { /* 上传图片配置项 */ ...
- Spring MVC 学习总结(五)——校验与文件上传
Spring MVC不仅是在架构上改变了项目,使代码变得可复用.可维护与可扩展,其实在功能上也加强了不少. 验证与文件上传是许多项目中不可缺少的一部分.在项目中验证非常重要,首先是安全性考虑,如防止注 ...
- Spring Boot会员管理系统——处理文件上传
温馨提示 Spring Boot会员管理系统的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎.所以,可以学习下这些知识.当然,直接入门的话使 ...
- 补习系列(11)-springboot 文件上传原理
目录 一.文件上传原理 二.springboot 文件机制 临时文件 定制配置 三.示例代码 A. 单文件上传 B. 多文件上传 C. 文件上传异常 D. Bean 配置 四.文件下载 小结 一.文件 ...
- JavaScript实现form表单的多文件上传
form表单的多文件上传,具体内容如下 formData对象可以使用一系列的键值对来模拟一个完整的表单,然后使用Ajax来发送这个表单 使用<form>表单初始化FormData对象的方式 ...
- 文件上传下下载(不包含断点续传) Excel,Word导入导出基础
1.文件上传下载(MVC应用) 视图:form表单,编码方式为multipart/form-data <body> <div> <form action="/D ...
随机推荐
- Androidproject夹
创建一个Android应用 File -> New -> Android Application Project 填写应用名称.project名称.包名 设置project的相关信息.默认 ...
- MFC之窗体改动工具栏编程状态栏编程程序启动画面
1窗体外观的改动 (1)改动在CMainFrame::preCreateWindow(CREATESTRUCT& cs) 改动标题:cs.style&=FWS_ADDTOTITLE; ...
- Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计)
Cocos2d-x 3.1.1 Lua实例-AccelerometerTest(重力加速计) 本篇博客介绍Cocos2d-x的第一个实例--重力加速计測试.效果图(注:这里无法模拟重力感应): --[ ...
- Web工程师的工具箱 | 酷壳 - CoolShell.cn
Web工程师的工具箱 | 酷壳 - CoolShell.cn Web工程师的工具箱 2012年12月19日 陈皓 发表评论 阅读评论 30,168 人阅读 本文出自Ivan Zuzak 的&l ...
- 在 window7 window8下公布webService注意问题
李石磊 学习日记 错误形如: 解决方式: 1.将服务公布,在IIS下创建虚拟文件夹 2.为上面创建的虚拟文件夹创建单独的应用程序,方法是右击虚拟文件夹.点击"加入应用程序...", ...
- MSF 离线攻击
MSF 离线攻击 MSF连环攻击在internet上实现是不太现实的,网络中的安全设备(防火墙.入侵检测.入侵防护系统). 实验拓扑如下: 实验说明:安全实验中的包过滤防火墙在测试中使用的是linux ...
- 利用objc的runtime来定位次线程中unrecognized selector sent to instance的问题
昨天遇到一个仅仅有一行错误信息的问题: -[NSNull objectForKey:]: unrecognized selector sent to instance 0x537e068 因为这个问题 ...
- Codeforces Round #248 (Div. 1)——Ryouko's Memory Note
题目连接 题意: 给n和m,一行m个1<=x<=n的数.记c=.如今仅仅能选择一个数x变成y,序列中全部等于x的值都变成y,求最小的c 分析: 对于一个数x,把与他相邻的所有的非x的数所有 ...
- Android模拟器设置竖屏
使用Android模拟器測试自己开发的程序时,有时候会发现屏幕为横屏显示,查看效果非常不方便. 这里记录了一种禁止横屏的方法. 在文件 Mainfest.xml 中,在须要禁止横屏的 activit ...
- HDOJ 3516 Tree Construction
四边形优化DP Tree Construction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...