Java文件读写的常用技术——项目开发实战篇

一、 概述:

本文主要以Office办公软件和PDF文件的读写为主线逐步展开说明,分析将相关格式的文件内容文本化的过程。另外针对于Excel文件内容的结构化和对象化进行实际案例分析,给出更适应Spring框架配置的解决方案。

POI基本介绍:

1、 POI基本描述:

POI是用编写的免费开源且跨平台的Java API,Apache POI提供API给Java程式对格式档案读和写的功能。POI为"Poor Obfuscation Implementation"的首字母缩写,直译为"可怜的模糊实现",或意为"简洁版的模糊实现"。

.NET的开发人员则可以利用NPOI(POI for .NET)来存取Microsoft Office文档的功能。

2、 POI需要的Jar包:

a) poi-3.10-Final.jar(用于xls);

b) poi-ooxml-3.10-Final.jar(用于xlsx);

c) poi-ooxml-schemas-3.10.jar;

d) xmlbeans-2.6.0.jar

e) dom4j-1.6.1.jar

f) poi-scratchpad-3.10-FINAL-20140208.jar(用于word,ppt)

3、 POI结构说明(包名称说明):

a) HSSF:提供读写Microsoft Excel XLS格式档案的功能;

b) XSSF:提供读写Microsoft Excel OOXML XLSX格式档案的功能;

c) HWPF:提供读写Microsoft Word DOC格式档案的功能;

d) HSLF:提供读写Microsoft PowerPoint格式档案的功能;

e) HDGF:提供读Microsoft Visio格式档案的功能;

f) HPBF:提供读Microsoft Publisher格式档案的功能;

g) HSMF:提供读Microsoft Outlook格式档案的功能;

三、 PDF基本介绍:

1、 摘要:

自从Adobe公司1993年第一次发布公共PDF参考以来,支持各种语言和平台的PDF工具和类库就如雨后春笋般涌现。然而,Java应用开发中Adobe技术的支持相对滞后了。

自从Adobe公司1993年第一次发布公共PDF参考以来,支持各种语言和平台的PDF工具和类库就如雨后春笋般涌现。然而,Java应用开发中Adobe技术的支持相对滞后了。这是个奇怪的现象,因为PDF文档是企业信息系统存储和交换信息的大势所趋,而Java技术特别适合这种应用。然而,Java开发人员似乎直到最近才获得成熟可用的PDF支持。

2、 特性:

PDFBox(一个BSD许可下的源码开放项目)是一个为开发人员读取和创建PDF文档而准备的纯Java类库。它提供如下特性:

a) 提取文本,包括Unicode字符;

b) 和Jakarta Lucene等文本搜索引擎的整合过程十分简单;

c) 加密/解密PDF文档;

d) 从PDF和XFDF格式中导入导出相关表单数据;

e) 向已有PDF文档中追加内容;

f) 将一个PDF文档切分为多个文档;

g) 覆盖PDF文档;

3、 PDFBox API:

PDFBox设计时采用面向对象的方式来描述PDF文档。PDF文档的数据是一系列基本对象的集合:数组,布尔型,字典,数字,字符串和二进制流。PDFBox在org.pdfbox.cos包(COS模型)中定义这些基本对象类型。你可以使用这些对象与PDF文档进行任何交互,但你应该先对PDF文档内部结构以及高层概念作一些深入的了解。例如,页面和字体都是带有特殊属性的字典对象;PDF参考手册提供这些特殊属性的含义和类型的说明,但这是一个枯燥的文档查阅过程。

于是,org.pdfbox.pdfmodel包(PD模型)应运而生,它的基础是COS模型,但提供了以一种熟悉的方式访问PDF文档对象的高层API。对底层COS模型进行了封装的PDPage和PDFont等类就在这个包中。

注意:虽然PD模型提供了一些优秀的功能,但它依然是一个开发中的模型。在有些实例中,你可能需要借助于COS模型才能访问PDF的特定功能性。所有的PD模型对象都提供返回相应的COS模型对象的方法。所以,在一般情况下,你都会使用PD模型,但PD模型鞭长莫及时你可以直接操作底层的COS模型。

4、 PDF需要的Jar包:

a) pdfbox-1.7.1.jar;

b) fontbox-1.7.1.jar;

四、 各种文件的处理方式:

1、 Excel文件:

示例代码:




java下载文件 导出 java文件怎么导出_java导出excel

ExcelTextParser



2、 Word文件:

示例代码:




java下载文件 导出 java文件怎么导出_Java_02

WordParser



3、 PPT文件:

示例代码:




java下载文件 导出 java文件怎么导出_java导出excel_03

PPTParser



4、 Visio文件:

示例代码:




java下载文件 导出 java文件怎么导出_java技术_04

VisioParser



5、 Pdf文件:

示例代码:




java下载文件 导出 java文件怎么导出_java下载文件 导出_05

PdfParser



五、 案例分析讲解:

1、 设计说明:

以Excel文件的不同文件格式读写为例进行分析。

a) 针对于文件格式的设计:

i. XLS和XLSX:

虽然XLS是使用HSSFWorkbook,而XLSX是使用XSSFWorkbook,但针对于sheet的处理是一致的,因此使用同一个类进行处理。另外将针对于每行数据的处理单独抽取为一个类,简化代码逻辑,明确代码层次关系;

ii. CSV:

以纯文本形式存储表格数据的,因此单独创建一个类进行处理。注意:将分隔符(默认是英文逗号)和数据起始行号单独保存单独的私有成员变量中,以保证代码的通用性;

b) 针对于代码结构的设计:

使用接口将对象整合,以便在注入时可以使用同一个对象实例化。

2、 类图:




java下载文件 导出 java文件怎么导出_Java_06

PowerDesigner类图



3、 Spring配置:




java下载文件 导出 java文件怎么导出_java导出excel_07

Spring配置



4、 各个类的具体情况:

a) IParser:




java下载文件 导出 java文件怎么导出_java技术_08

IParser



b) ExcelParser:




java下载文件 导出 java文件怎么导出_jar_09

ExcelParser



c) CsvParser:




java下载文件 导出 java文件怎么导出_jar_10

CsvParser



d) RowParser:




java下载文件 导出 java文件怎么导出_java下载文件 导出_11

RowParser