import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.log4j.Logger;
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.pdfbox.encryption.DecryptDocument;
import org.pdfbox.pdfparser.PDFParser;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.util.PDFTextStripper;
import org.textmining.text.extraction.WordExtractor;
public class FileReader
{
/**
* Description:解析文件,返回文档内容 <br>
*
*
* @param logger
* Longger
* @param realPath
* String
* @return String
*/
public static String readOneFile(Logger logger, String realPath)
{
FileInputStream in = null;
BufferedReader reader = null;
String content = "";
try
{
File file = new File(realPath);
if (!file.canRead())
{
logger.error(MessageCode.getPageMessage("iiss.info.common.filenotread") + realPath);
return "";
}
String suffix = realPath.substring(realPath.lastIndexOf(".") + 1, realPath.length());
if ("doc".equalsIgnoreCase(suffix))
{
WordExtractor extractor = new WordExtractor();
content = extractor.extractText(new FileInputStream(file));
if (logger.isDebugEnabled())
{
logger.debug("summary=" + content);
}
}//解析excel文件
else if ("xls".equalsIgnoreCase(suffix))
{
StringBuffer rowData = new StringBuffer(KeyConstant.INITIAL_BUFFER);
in = new FileInputStream(file);
// 创建对Excel对象
HSSFWorkbook workbook = new HSSFWorkbook(in);
//获得excel的页数
int sheetNo = workbook.getNumberOfSheets();
if (sheetNo > 0)
{
for (int i = 0; i < sheetNo; i++)
{
// 获取每一页对象
HSSFSheet sheet = workbook.getSheetAt(i);
if (sheet != null)
{
//逐行获得内容
HSSFRow row = null;
for (int j = 0; j <= sheet.getLastRowNum(); j++)
{
try
{
row = sheet.getRow(j);
}
catch (Exception e)
{
row = null;
}
if (row == null)
{
continue;
}
//逐个单元格获得内容
HSSFCell cell = null;
String fieldValue = null;
for (int k = 0; k <= row.getLastCellNum() - 1; k++)
{
try
{
cell = row.getCell((short)k);
}
catch (Exception e)
{
cell = row.createCell((short)k);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue("");
}
fieldValue = POITools.getCellValue(cell);
if (fieldValue != null && !"".equals(fieldValue))
{
rowData.append(fieldValue);
rowData.append("");
}
}
}
}
}
}
content = rowData.toString();
if (logger.isDebugEnabled())
{
logger.debug("summary=" + content);
}
}
else if ("txt".equalsIgnoreCase(suffix))
{
in = new FileInputStream(file);
reader = new BufferedReader(new InputStreamReader(in));
StringBuffer sBuffer = new StringBuffer();
String s = null;
do
{
s = reader.readLine();
if (s != null)
{
sBuffer.append(s);
}
} while (s != null);
content = sBuffer.toString();
if (logger.isDebugEnabled())
{
logger.debug("summary=" + content);
}
}
else if ("html".equalsIgnoreCase(suffix) || "htm".equalsIgnoreCase(suffix))
{
HTMLParser parser = new HTMLParser(file);
content = parser.getContent();
}
else if ("pdf".equalsIgnoreCase(suffix))
{
PDDocument pdf = null;
try
{
PDFParser parser = new PDFParser(new FileInputStream(file));
parser.parse();
pdf = parser.getPDDocument();
if (pdf.isEncrypted())
{
DecryptDocument decryptor = new DecryptDocument(pdf);
decryptor.decryptDocument("");
}
PDFTextStripper stripper = new PDFTextStripper();
content = stripper.getText(pdf);
if (logger.isDebugEnabled())
{
logger.debug("summary=" + content);
}
}
catch (Exception e)
{
logger.error(e, e);
}
catch (OutOfMemoryError t)
{
logger.error(t, t);
}
finally
{
try
{
if (pdf != null)
{
pdf.close();
}
}
catch (IOException e)
{
logger.error(MessageCode.getPageMessage("iiss.info.common.readfilefail") + realPath);
}
}
}
else
{
content = " ";
}
}
catch (FileNotFoundException e)
{
logger.error(MessageCode.getPageMessage("iiss.info.common.filenotfound") + realPath);
}
catch (IOException e)
{
logger.error(MessageCode.getPageMessage("iiss.info.common.readfilefail") + realPath);
}
catch (InterruptedException e)
{
logger.error(MessageCode.getPageMessage("iiss.info.common.readhtmlfilefail") + realPath);
}
catch (Exception e)
{
logger.error(MessageCode.getPageMessage("iiss.info.common.parsefilefail") + e, e);
}
finally
{
try
{
if (in != null)
{
in.close();
}
}
catch (IOException e)
{
logger.error(e, e);
}
try
{
if (reader != null)
{
reader.close();
}
}
catch (IOException e)
{
logger.error(e, e);
}
}
return content;
}
}
分享到:
相关推荐
首先,Java提供了多种类来处理文件读取,如`FileReader`,`BufferedReader`等。`FileReader`主要用于读取字符流,而`BufferedReader`则通过缓冲区提高读取效率。在按顺序读取文件时,通常我们会先创建一个`...
在Java编程语言中,文件读取是常见的任务,可以用于处理各种类型的数据,如文本、图像、音频等。本文将详细介绍Java中四种不同的文件读取方法:按字节读取、按字符读取、按行读取以及随机读取。 1. **按字节读取...
最近在用java的IO包下面的RandomAccessFile类读写中文文件时遇到了乱码问题,解决不了。于是索性自己写个类,可以进行中文文件读写而不乱码。 压缩包里提供了.jar包和源代码。 ************************************...
根据给定的文件信息,...综上所述,Java提供了丰富的API来处理文件读取,开发者可以根据具体需求选择合适的方法。掌握这些技术对于任何从事软件开发的人来说都是至关重要的,尤其是在处理大量数据和复杂文件格式时。
JAVA实现远程文件读取 JAVA是一种广泛应用于软件开发的编程语言,随着网络技术的发展,JAVA也提供了许多支持远程文件读取的功能,本文将详细介绍JAVA实现远程文件读取的知识点。 1. Socket 编程 在JAVA中,Socket...
在Java编程语言中,文件的读写操作是日常开发中不可或缺的部分。无论是处理用户数据、配置文件,还是进行数据持久化,都需要用到文件的读写功能。本篇将详细介绍如何在Java中实现文件的读写操作,并通过一个小例子...
Java读取大文件的处理是Java编程中的一项重要技术,特别是在处理大文件时需要注意性能和响应速度。下面我们将对Java读取大文件的处理技术进行详细的介绍。 标题解释 Java读取大文件的处理是指使用Java语言来读取大...
在Java编程中,CSV(Comma Separated Values)文件是一种常用的格式,用于存储表格数据,如电子表格或数据库。然而,当处理包含中文字符的CSV文件时,可能会遇到乱码问题。这个问题通常与字符编码设置有关,特别是...
在Java 7及以上版本,你可以使用try-with-resources语句更优雅地处理文件读取。例如,要读取一个文件的内容: ```java try (BufferedReader reader = new BufferedReader(new FileReader(file))) { String line; ...
总之,`mpxj`是Java开发者处理MPP文件的强大工具,它简化了与Microsoft Project文件的交互,让你能够在Java应用中轻松读取、修改和创建项目计划。在实际开发中,可以根据具体需求灵活运用这个库的功能,实现复杂的...
Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...
在Java中,由于标准库并未提供内置的INI文件读取支持,我们需要自定义一个解析器。`IniReader.java`很可能就是这样一个解析器,它可能实现了以下功能: 1. **读取文件**:首先,`IniReader`类会使用`BufferedReader...
在IT行业中,图像处理是不可或缺的一部分,特别是在...总的来说,Java通过第三方库如Apache Commons Imaging,提供了读取和处理TIFF文件的能力,这使得开发者能够在Java应用程序中灵活地处理这种专业级别的图像格式。
在Java编程语言中,读取文件是一项常见的操作,尤其是在处理数据、日志文件或配置信息时。本文将详细解析如何使用Java读取文本文件,基于提供的代码示例,深入探讨其工作原理及最佳实践。 ### Java读取文本文件的...
在Java编程中,随机读写Java类文件是一个高级主题,涉及到对字节码级别的操作,通常用于类的动态加载、代码注入或者逆向工程等场景。以下是对这一主题的详细阐述: 1. **Java类文件结构**:首先,了解Java类文件的...
在Java编程中,元数据(Metadata)是指关于数据的数据,它提供有关文件、数据库记录、类、方法等的附加信息,但不直接构成这些实体的实际内容。元数据可以帮助理解和处理这些对象,例如,图片的元数据可能包含拍摄...
在提供的"示例代码.txt"文件中,可能包含了一个使用UCanAccess进行分页读取的Java代码示例。这个示例可能包括了建立连接、设置分页参数、执行查询、处理结果集以及关闭资源的过程。打开这个文件,按照示例代码一步步...