`
ansjsun
  • 浏览: 203871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 解析文件 大全

阅读更多
公司有个项目让java从各种文档中抽取正文.
于是费了很多经历来写起初..去网上找demo
一下是摘抄一个哥们的例子
package org.css.resource.businesssoft.searchengine.quwenjiansuo;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.poi.POITextExtractor;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.extractor.ExtractorFactory;
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.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage;
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;
import org.apache.xmlbeans.XmlException;
/**
 * 
 * @author lizh
 *
 */
public class CovertFile {

	/**
	 * 从word 2003文档中提取纯文本
	 * @param is
	 * @return
	 * @throws IOException
	 */
	public static String extractTextFromDOC(InputStream is) throws IOException {
		WordExtractor ex = new WordExtractor(is); // is是WORD文件的InputStream
		return ex.getText();
	}

	/**
	 * 从word 2007文档中提取纯文本
	 * @param fileName
	 * @return
	 */
	public static String extractTextFromDOC2007(String fileName) {
		try {
			OPCPackage opcPackage = POIXMLDocument.openPackage(fileName);
			POIXMLTextExtractor ex = new XWPFWordExtractor(opcPackage);
			return ex.getText();
		} catch (Exception e) {
			return "";
		}
	}

	/**
	 * 从excel 2003文档中提取纯文本
	 * @param is
	 * @return
	 * @throws IOException
	 */
	private static String extractTextFromXLS(InputStream is) throws IOException {
		StringBuffer content = new StringBuffer();
		HSSFWorkbook workbook = new HSSFWorkbook(is); // 创建对Excel工作簿文件的引用

		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 (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
									content.append(aCell.getNumericCellValue());
								} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
									content.append(aCell.getBooleanCellValue());
								} else {
									content.append(aCell.getStringCellValue());
								}
							}
						}
					}
				}
			}
		}
		return content.toString();
	}

	/**
	 * 从excel 2007文档中提取纯文本
	 * @param fileName
	 * @return
	 * @throws Exception
	 */
	private static String extractTextFromXLS2007(String fileName)
			throws Exception {
		StringBuffer content = new StringBuffer();

		// 构造 XSSFWorkbook 对象,strPath 传入文件路径
		XSSFWorkbook xwb = new XSSFWorkbook(fileName);

		// 循环工作表Sheet
		for (int numSheet = 0; numSheet < xwb.getNumberOfSheets(); numSheet++) {
			XSSFSheet xSheet = xwb.getSheetAt(numSheet);
			if (xSheet == null) {
				continue;
			}

			// 循环行Row
			for (int rowNum = 0; rowNum <= xSheet.getLastRowNum(); rowNum++) {
				XSSFRow xRow = xSheet.getRow(rowNum);
				if (xRow == null) {
					continue;
				}

				// 循环列Cell
				for (int cellNum = 0; cellNum <= xRow.getLastCellNum(); cellNum++) {
					XSSFCell xCell = xRow.getCell(cellNum);
					if (xCell == null) {
						continue;
					}

					if (xCell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN) {
						content.append(xCell.getBooleanCellValue());
					} else if (xCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {
						content.append(xCell.getNumericCellValue());
					} else {
						content.append(xCell.getStringCellValue());
					}
				}
			}
		}

		return content.toString();
	}
	
	/**
	 * 从excel 2007文档中提取纯文本
	 * @param fileName
	 * @return
	 */
	public static String getXLS2007(String fileName){
		String doc = "";
		try{
			doc = extractTextFromXLS2007(fileName);
			return doc;
		}catch(Exception e){
			return "";
		}
	}
	
	/**
	 * 从ppt 2003、2007文档中提取纯文本
	 * @param fileName
	 * @return
	 */
	public static String getPPTX(String fileName){
		String doc = "";
		try{
			File inputFile = new File(fileName);   
			POITextExtractor extractor = ExtractorFactory.createExtractor(inputFile);
			doc = extractor.getText();
			return doc;
		}catch(Exception e){
			return "";
		}
	}
	
	
	public static void main(String[] args) {
		try {
//			String wordFile = "D:/松山血战.docx";
//			String wordText2007 = CovertFile.extractTextFromDOC2007(wordFile);
//			System.out.println("wordText2007=======" + wordText2007);
//
//			InputStream is = new FileInputStream("D:/XXX研发中心技术岗位职位需求.xls");
//			String excelText = CovertFile.extractTextFromXLS(is);
//			System.out.println("text2003==========" + excelText);

//			String excelFile = "D:/zh.xlsx";
//			String excelText2007 = CovertFile.extractTextFromXLS2007(excelFile);
//			System.out.println("excelText2007==========" + excelText2007);
			
			String pptFile = "D:/zz3.ppt";
			String pptx = CovertFile.getPPTX(pptFile);
			System.out.println("pptx==========" + pptx);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}



最后突然发现其实只用两行代码就能搞定
office 2003 - office 2007
POITextExtractor extractor = ExtractorFactory.createExtractor(f);
			return extractor.getText();


于是我泪流满面....白忙乎了..顺路奉上解析pdf的吧
package com.lingjoin.extractors;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.StringReader;
import java.util.Date;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentInformation;
import org.apache.pdfbox.util.PDFTextStripper;
import com.lingjoin.paser.LingJoinFile;

/**
 * PDF解析器
 * 
 * @author Ansj
 * 
 */
public class PDFExtractor extends AbstractExtractor {
	
	private String getContent(LingJoinFile f) {
		// TODO Auto-generated method stub
		PDDocument doc = null ;
		try {
			doc = PDDocument.load(f);
			PDFTextStripper stripper = new PDFTextStripper();
			/**
			 * 设置文件的信息
			 */
			this.setLingJoinFileInfo(f, doc
					.getDocumentInformation());
			return stripper.getText(doc);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (doc != null) {
				try {
					doc.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		return "";
	}

	private BufferedReader getContentReader(LingJoinFile f) {
		return new BufferedReader(new StringReader(this.getContent(f)));
	}

	/**
	*    
	* 项目名称:FilePaser 
	* 类描述:   设置文件的信息
	* 创建人:ANSJ   
	* 创建时间:2010-4-14 下午04:27:57  
	* 修改备注:   
	* @version    
	 */
	private void setLingJoinFileInfo(LingJoinFile f, PDDocumentInformation info) {
		if (info.getAuthor() != null) {
			f.setlAuthor(info.getAuthor());
		}
//		try {
//			if (info.getModificationDate() != null) {
//				Date date = info.getModificationDate().getTime();
//				f.setlModificationDate(date.getTime());
//			}
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		//设置标题
//		if (info.getTitle() != null) {
//			f.setlTitle(info.getTitle());
//		}
	}

	public void paserFileToReader(LingJoinFile f) throws Exception {
		f.setlContentReader(this.getContentReader(f)) ;

	}

	public void paserFileToString(LingJoinFile f) throws Exception {
		// TODO Auto-generated method stub
		f.setlContent(this.getContent(f)) ;
	}
	
	public PDFExtractor(Integer typeFlag) {
		// TODO Auto-generated constructor stub
		this.typeFlag = typeFlag ;
	}
	
	private Integer typeFlag = null ;
	
	public Integer getTypeFlag() {
		// TODO Auto-generated method stub
		return typeFlag;
	}
}
分享到:
评论
5 楼 ansjsun 2013-04-25  
xiaorongrongcc 写道
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.poi.poifs.filesystem.POIFSFileSystem.hasPOIFSHeader(Ljava/io/InputStream;)Z
我一直会报这个错误,网上有说是包的问题,请问下你加的那些包咯


weka 神器..你用哪个吧..比这些好用
4 楼 xiaorongrongcc 2013-04-24  
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.poi.poifs.filesystem.POIFSFileSystem.hasPOIFSHeader(Ljava/io/InputStream;)Z
我一直会报这个错误,网上有说是包的问题,请问下你加的那些包咯
3 楼 ansjsun 2012-04-02  
fxiaozj 写道
能不能发下全部的源码,AbstractExtractor LingJoinFile

这已经是历史了..我告诉你四个字母 tiki 自己去搜去吧
2 楼 fxiaozj 2012-04-02  
能不能发下全部的源码,AbstractExtractor LingJoinFile
1 楼 jordan421 2010-11-28  
···  正好,好东西,入我库拉

相关推荐

    java 解析 json文件 java 解析 json文件

    Java解析JSON文件是Java开发中常见的一项任务,特别是在与Web服务交互或处理API响应时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁和易于阅读及编写的特点,被广泛应用于网络数据传输...

    JAVA解析DBC文件

    总结来说,用JAVA解析DBC文件涉及的关键技术包括文件I/O操作、字符串处理、数据类型转换以及对象建模。在处理过程中需关注数据的大小端问题,以确保解析的正确性。同时,解析后的数据可以用于多种汽车相关的软件开发...

    java解析PDF文件

    java解析PDF格式的文件demo。JAVA实现PDF解析,对PDF文件中的文本内容可输出仅供参考学习,不喜勿喷。

    java对mht文件解析

    #### 三、Java解析MHT文件的关键步骤 ##### 3.1 获取MHT文件内容 在Java中,首先需要读取MHT文件的全部内容到字符串中。这可以通过`InputStream`和`IOUtils`工具类来实现。 ```java String mhts = IOUtils....

    java解析dbf文件方案.pdf

    Java 解析 DBF 文件方案 Java 解析 DBF 文件方案是使用 Java 语言来读取和解析 DBF 文件的方法。DBF 文件是一种常见的数据库文件格式,广泛应用于许多行业。为了读取和解析 DBF 文件,需要使用 Java 语言中的数据库...

    java解析DWG文件为json使用superMap

    【标题】:“java解析DWG文件为json使用superMap” 【描述】:“java使用superMap解析DWG文件为json输出,本地通过,附件中为word操方式按照步骤可以导入数据集” 【标签】:“java解析DWG文件json java读取dwg...

    java 解析 chm 文件

    Java解析CHM文件是将Microsoft的 Compiled HTML Help (CHM) 文件转换成HTML网页的过程。CHM文件是一种常见的帮助文档格式,它包含了多个HTML页面、图像和其他资源,并使用了一种特殊的压缩方法存储。在Java中处理CHM...

    Java解析SO(ELF)文件

    Java解析时,可以创建一个数据结构来存储节区信息,并根据节区头部表的指针逐一解析。 为了实现上述功能,Java程序员通常会创建自定义的类来表示ELF文件的各种结构,如`ElfHeader`、`ProgramHeader`和`Section...

    java解析上传的shp文件,包含jar,方法,shp文件

    在Java编程环境中,解析Shapefile(.shp)文件是一项常见的任务,特别是在地理信息系统(GIS)应用中。Shapefile是一种广泛用于存储地理空间数据的开放格式。为了在Java中处理这些文件,我们可以利用开源库GeoTools...

    yaml文件解析(java)

    本文将深入探讨如何在Java中解析YAML文件,包括依赖管理、封装解析类以及源码分析。 首先,为了在Java项目中使用YAML解析功能,我们需要引入相关的库。在Maven项目中,可以在`pom.xml`文件中添加SnakeYAML的依赖: ...

    shp文件解析java实现

    本篇文章将详细讲解如何使用`meteoInfo`和`geotools`这两个Java库来解析`shp`文件,提取其中的数据,并获取边界线数据、中心点坐标以及最大和最小经纬度值。 `meteoInfo`是一个专门处理气象数据的Java库,虽然它的...

    Java解析气象数据.nc文件依赖jar包

    Java解析气象数据.nc文件依赖jar包,Java解析气象数据.nc文件依赖jar包

    Java解析FTP服务器文本文件

    Java解析FTP服务器文本文件 Java解析FTP服务器文本文件是指使用Java语言连接FTP服务器,上传、下载、递归目录遍历等基本操作的集合。在这个过程中,我们需要引入相关的jar包,例如cpdetector.jar、jchardet-1.0.jar...

    Java实现解析dcm医学影像文件并提取文件信息的方法示例

    Java实现解析dcm医学影像文件并提取文件信息的方法示例 本文主要介绍了Java实现解析dcm医学影像文件并提取文件信息的方法,结合实例形式分析了Java基于第三方库文件针对dcm医学影像文件的解析操作相关实现技巧。...

    Java读取解析GRIB2文件

    下面将详细介绍如何使用Java进行GRIB2文件的读取和解析。 1. **理解GRIB2文件结构**: GRIB2文件由多个消息组成,每个消息包含一组相关的气象数据。消息由一个固定长度的头部(Header)和可变长度的数据部分(Data...

    Java解析CSV文件

    本篇将详细介绍如何在Java中解析CSV文件,并以给定的"Java解析CSV文件"主题为例,结合提供的资源——`lucky_number_format.csv`、`javacsv-2.0.jar`和`CsvUtil.java`进行深入探讨。 首先,我们来看`javacsv-2.0.jar...

    java 读取文件 文件读取操作

    在Java编程语言中,文件读取是常见的任务,可以用于处理各种类型的数据,如文本、图像、音频等。本文将详细介绍Java中四种不同的文件读取方法:按字节读取、按字符读取、按行读取以及随机读取。 1. **按字节读取...

    用java解析DXF文件中的实体信息

    在本主题中,我们关注的是如何利用Java解析DXF(Drawing Exchange Format)文件,这是一种由AutoCAD软件生成的二进制或ASCII格式的文件,用于存储二维图形数据。DXF文件通常包含各种几何实体,如圆(circle)、椭圆...

    java解析apk文件

    首先,Java解析APK主要依赖于对ZIP文件格式的理解,因为APK本质上就是一个ZIP文件,其结构遵循特定的Android规范。你可以使用Java内置的`java.util.zip`包来读取和解压APK,然后提取所需的元数据。以下是一些关键...

    Java文件结构解析工具

    一个简单的分析工具,用于分析”.class/.cap/.exp”格式的Java文件。 对于CAP文件,支持version 2.1 and 2.2. 适用于JCVM的学习。 使用工具时,需保证“C:\Program Files\WinZip\WINZIP32.EXE”存在,用于解压CAP...

Global site tag (gtag.js) - Google Analytics