Java读取各种文件格式内容
所需的jar包哦也不要太记得了,大家可以搜搜,直接上代码:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.NumberFormat; import org.apache.commons.io.FileUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.ss.usermodel.Cell;
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;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor; /**
*文件内容读取转换器
*/
public class ReadFileConverter
{ public String getContents(String path) throws Exception
{
String contents = "";
int index = path.lastIndexOf(".");
String file_suffix = path.substring(index+1).toLowerCase();
if(file_suffix.equalsIgnoreCase("txt")||file_suffix.equalsIgnoreCase("log")){
contents = this.readTXT(path);
}
else if(file_suffix.equalsIgnoreCase("xls")){
contents = this.readXLS(path);
}
else if(file_suffix.equalsIgnoreCase("xlsx")){
contents = this.readXLSX(path);
}
else if(file_suffix.equalsIgnoreCase("doc")){
contents = this.readDOC(path);
}
else if(file_suffix.equalsIgnoreCase("docx")){
contents = this.readDOCX(path);
}
else if(file_suffix.equalsIgnoreCase("pdf")){
contents = this.readPDF(path);
}
return contents;
} public String readXLS(String file) throws Exception
{
StringBuilder content = new StringBuilder();
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file));
try{
for(int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++){
if (null != workbook.getSheetAt(numSheets)){
HSSFSheet aSheet = workbook.getSheetAt(numSheets);// 获得一个sheet
for(int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++){
if (null != aSheet.getRow(rowNumOfSheet)){
HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 获得一个行
for(short cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++){
if (null != aRow.getCell(cellNumOfRow)){
HSSFCell aCell = aRow.getCell(cellNumOfRow);// 获得列值
if (this.convertCell(aCell).length() > 0){
content.append(this.convertCell(aCell));
}
}
content.append("\n");
}
}
}
}
}
}
catch(Exception e){
content.append("xls文件格式不对或损坏");
}
finally{
if(workbook!=null){
workbook.close();
}
}
return content.toString();
} public String readXLSX(String file) throws Exception
{
StringBuilder content = new StringBuilder();
XSSFWorkbook workbook = new XSSFWorkbook(file);
try{
for(int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++){
if (null != workbook.getSheetAt(numSheets)){
XSSFSheet aSheet = workbook.getSheetAt(numSheets);// 获得一个sheet
for(int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++){
if (null != aSheet.getRow(rowNumOfSheet)){
XSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 获得一个行
for(short cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++){
if (null != aRow.getCell(cellNumOfRow)){
XSSFCell aCell = aRow.getCell(cellNumOfRow);// 获得列值
if (this.convertCell(aCell).length() > 0){
content.append(this.convertCell(aCell));
}
}
content.append("\n");
}
}
}
}
}
}catch(Exception e){
content.append("xlsx文件格式不对或损坏");
}
finally{
if(workbook!=null){
workbook.close();
}
}
return content.toString();
} public String readTXT(String file) throws Exception
{
String contents = "";
try{
String encoding = this.get_charset(new File(file));
if (encoding.equalsIgnoreCase("GBK")) {
contents = FileUtils.readFileToString(new File(file), "gbk");
} else {
contents = FileUtils.readFileToString(new File(file), "utf8");
}
}catch(Exception e){
contents = "txt文件格式不对或损坏";
}
return contents;
} public String readDOC(String file) throws Exception
{
String returnStr;
WordExtractor wordExtractor = new WordExtractor(new FileInputStream(new File(file)));
try{
returnStr = wordExtractor.getText();
}catch(Exception e){
returnStr="doc文件格式不对或损坏";
}
finally{
if(wordExtractor != null){
wordExtractor.close();
}
}
return returnStr;
} public String readDOCX(String file) throws Exception
{
String docx;
XWPFWordExtractor xwp= new XWPFWordExtractor(POIXMLDocument.openPackage(file));
try{
docx= xwp.getText();
}catch(Exception e){
docx="docx文件格式不对或损坏";
}
finally{
if(xwp !=null){
xwp.close();
}
}
return docx;
} public String readPDF(String file) throws Exception
{
String result = null;
FileInputStream is = null;
PDDocument document = null;
try{
is = new FileInputStream(file);
document = PDDocument.load(is);
PDFTextStripper stripper = new PDFTextStripper();
result = stripper.getText(document);
}catch(Exception e){
result="pdf文件格式不对或损坏";
}
finally{
if (is != null){
is.close();
}
if (document != null){
document.close();
}
}
return result;
} private String get_charset(File file) throws IOException
{
String charset = "GBK";
byte[] first3Bytes = new byte[3];
BufferedInputStream bis = null;
try {
boolean checked = false;
bis = new BufferedInputStream(new FileInputStream(file));
bis.mark(0);
int read = bis.read(first3Bytes, 0, 3);
if (read == -1)
return charset;
if (first3Bytes[0] == (byte) 0xFF && first3Bytes[1] == (byte) 0xFE) {
charset = "UTF-16LE";
checked = true;
} else if (first3Bytes[0] == (byte) 0xFE&& first3Bytes[1] == (byte) 0xFF) {
charset = "UTF-16BE";
checked = true;
} else if (first3Bytes[0] == (byte) 0xEF&& first3Bytes[1] == (byte) 0xBB&& first3Bytes[2] == (byte) 0xBF) {
charset = "UTF-8";
checked = true;
}
bis.reset();
if (!checked) {
// int len = 0;
int loc = 0;
while ((read = bis.read()) != -1) {
loc=loc+1;
if (read >= 0xF0)
break;
if (0x80 <= read && read <= 0xBF) // 单独出现BF以下的,也算是GBK
break;
if (0xC0 <= read && read <= 0xDF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) // 双字节 (0xC0 - 0xDF)
// (0x80
// - 0xBF),也可能在GB编码内
continue;
else
break;
} else if (0xE0 <= read && read <= 0xEF) {// 也有可能出错,但是几率较小
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
read = bis.read();
if (0x80 <= read && read <= 0xBF) {
charset = "UTF-8";
break;
} else
break;
} else
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null) {
bis.close();
}
}
return charset;
} @SuppressWarnings("deprecation")
private String convertCell(Cell cell)
{
NumberFormat formater = NumberFormat.getInstance();
formater.setGroupingUsed(false);
String cellValue = "";
if (cell == null) {
return cellValue;
}
switch (cell.getCellTypeEnum()) {
case NUMERIC:
cellValue = formater.format(cell.getNumericCellValue());
break;
case STRING:
cellValue = cell.getStringCellValue();
break;
case BLANK:
cellValue = cell.getStringCellValue();
break;
case BOOLEAN:
cellValue = Boolean.valueOf(cell.getBooleanCellValue()).toString();
break;
case ERROR:
cellValue = String.valueOf(cell.getErrorCellValue());
break;
default:
cellValue = "";
}
return cellValue.trim();
} }
Java读取各种文件格式内容的更多相关文章
- java读取txt文件内容
package read; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; public ...
- Java 读取文件的内容
Java 读取文件的内容 1) CLASS_NAME: 换成自己真实的类名 2) /page/test.json: 换成自己真实的page 3) FileUtils: 来自于org.apache.co ...
- java读取excel文件内容
1.导入依赖JAR包 <!-- jxl 操作excel --> <dependency> <groupId>org.jxls</groupId> < ...
- 实验10—— java读取歌词文件内容动画输出
1.Read.java package cn.tedu.demo; import java.io.BufferedReader; import java.io.File; import java.io ...
- Java 读取Excel 文件内容
在一个项目中,有一个需求,是把excel文件的内容转换为xml格式展示.在学习如何操作的过程中,首先是如何获取excel文件,其中操作的代码如下: 1.首先是导入需要的 jar, 下载地址:https ...
- JAVA读取Excel中内容(HSSF和Workbook两种方法)
内容添加,以前是用的HSSF,前几天帮同学写一个统计表用了Workbook,现在码一下. ---新内容(Workbook)--- 同学要统计一个xls表格,让表1里面的某一列内容对表2里面的每列进行匹 ...
- Java 读取 txt 文件内容到容器 List
方法一: 一.桌面上准备 DataObject.txt 文件,内容为: 二.打开 Eclipse,编写代码如下: import java.io.BufferedReader; import java. ...
- Java读取粘贴板内容
package com.test.jvm.oom.design; import java.awt.Image; import java.awt.Toolkit; import java.awt.dat ...
- 用java读取多种文件格式的文件(pdf,pptx,ppt,doc,docx..)
本文通过开源pdfbox和poi进行处理多种文件格式的文本读入 1.需要的jar的maven坐标: <dependency> <groupId>org.apache.pdfbo ...
随机推荐
- 73th LeetCode Weekly Contest Rotated Digits
X is a good number if after rotating each digit individually by 180 degrees, we get a valid number t ...
- Telerik RadPropertyGrid 设置显隐 Combox选择
Telerik RadPropertyGrid 的排序按钮.搜索框和描述面板的显隐只要设置SortAndGroupButtons.SearchBox.DescriptionPanel的属性值改为Vis ...
- C++之Vect
在C++中数组和向量都是多同类元素的集合,他们也有很明显的区别 1 数组属于静态分配,编译之前必须知道数组的大小,一旦确定就不能更改:2个数组之间不能直接赋值实现拷贝,而必须显式用for或者拷贝函数拷 ...
- B - Reverse and Compare 小小思维题
http://agc019.contest.atcoder.jp/tasks/agc019_b 一开始的做法是, 用总数减去回文子串数目,因为回文子串怎么翻转都不影响答案. 然后,如果翻转afucka ...
- 是时候搞清楚 Spring Boot 的配置文件 application.properties 了!
在 Spring Boot 中,配置文件有两种不同的格式,一个是 properties ,另一个是 yaml . 虽然 properties 文件比较常见,但是相对于 properties 而言,ya ...
- C#在VS2005开发环境中利用异步模式来对一个方法的执行时间进行超时控制
using System.Threading; using System; namespace ConsoleApplication4 { public class Program { static ...
- 客户端设置WebService调用超时时间
刚接触WebService,对如何在客户端设置WebService调用超时时间查阅了一些资料,现总结如下: ============================================== ...
- Openstack Ocata 多节点分布式部署
1 安装环境 1.1 安装镜像版本 建议最小化安装,这里用的是CentOS-7-x86_64-Minimal-1511. 1.2 网络规划 本文包含控制节点controller3,计算节点comput ...
- Linux常用操作2
第1章 find命令扩展 转自:https://www.cnblogs.com/clsn/p/7520333.html 1.1 方法一 |xargs 通过|xargs将前面命令的执行结果传给后面. [ ...
- BZOJ3624: [Apio2008]免费道路(最小生成树)
题意 题目链接 Sol 首先答案一定是一棵树 这棵树上有一些0边是必须要选的,我们先把他们找出来,如果数量$\geqslant k$显然无解 再考虑继续往里面加0的边,判断能否加到k条即可 具体做法是 ...