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文件:

示例代码:

ExcelTextParser

2、 Word文件:

示例代码:

WordParser

3、 PPT文件:

示例代码:

PPTParser

4、 Visio文件:

示例代码:

VisioParser

5、 Pdf文件:

示例代码:

PdfParser

五、 案例分析讲解:

1、 设计说明:

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

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

i. XLS和XLSX:

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

ii. CSV:

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

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

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

2、 类图:

PowerDesigner类图

3、 Spring配置:

Spring配置

4、 各个类的具体情况:

a) IParser:

IParser

b) ExcelParser:

ExcelParser

c) CsvParser:

CsvParser

d) RowParser:

RowParser

c++ 文件读写_Java文件读写的常用技术相关推荐

  1. java 读写文件乱码_Java 解决读写本地文件中文乱码的问题

    Java 解决读写本地文件中文乱码的问题 前言: 在用Java程序进行读写含中文的txt文件时,经常会出现读出或写入的内容会出现乱码.原因其实很简单,就是系统的编码和程序的编码采用了不同的编码格式.通 ...

  2. java fileutils 文件夹_java文件操作---FileUtils

    Java的文件操作太基础,缺乏很多实用工具,比如对目录的操作,支持就非常的差了.如果你经常用Java操作文件或文件夹,你会觉得反复编写这些代码是令人沮丧的问题,而且要大量用到递归. 下面是的一个解决方 ...

  3. java 文件监控_Java 文件监控,实时监控文件加载

    前段时间设计一个文件自动加载系统模块,功能就像是在Tomcat的webapps目录下发布war包那样,只要一有war包加载进来,tomcat立刻就会去解压这个war包,并把它挂载在tomcat上,供网 ...

  4. java编程文件传输_JAVA文件传输程序

    源代码已经上传了. 第3章      设计文档 3.1       任务概述 本项任务要开发一款P2P文件传输软件,该软件可以在局域网和互连上使用,具有文件传输,断点续传,多线程连接等功能. 3.1. ...

  5. java 文件字节流_Java:文件字符流和字节流的输入和输出

    最近在学习Java,所以就总结一篇文件字节流和字符流的输入和输出. 总的来说,IO流分类如下: 输入输出方向:     输入流(从外设读取到内存)和输出流(从内存输出到外设) 数据的操作方式: 字节流 ...

  6. java 文件分隔符_Java文件分隔符

    java.io.File类包含四个静态分隔符变量.在这里,我们将了解它们以及何时使用它. File.separator:平台相关的默认名称 - 分隔符是String.对于Windows,它是'\',对 ...

  7. java 能不能回收 文件流_Java文件流关闭和垃圾回收机制

    1.先看以下一段代码 import java.io.FileInputStream; public class TTT { public static void main(String[] args) ...

  8. java 删除文件失败_java 文件删除失败(被进程占用)

    解决方案:系统进行资源强制回收//System.gc();{不建议使用} 关闭流(未及时关闭会内存溢出) 问题--- 文件删除失败 (后来发现是被进程占用) 发现问题--第一次测试10个文件上传成功8 ...

  9. java 文件输出流_Java 文件输出流

    Java IO教程 - Java文件输出流 创建输出流 要写入文件,我们需要创建一个FileOutputStream类的对象,它将表示输出流.// Create a file output strea ...

最新文章

  1. hdu 4622 Reincarnation SAM模板题
  2. ubuntu声卡相关
  3. ecshop 整合 QQ登陆 和 支付宝快捷登陆代码
  4. Oracle For 循环添加数据
  5. c语言 指针_C语言——指针
  6. k2p一直亮红灯搜不到信号_周迅感情亮红灯?真离了!?亮红灯英文是red light ?red 对了,但不用 light!...
  7. 5.2 分类器的评价指标—accuracy、precision、recall、F1、Fβ、AUC与ROC
  8. 汽车故障诊断技术【6】
  9. 游戏建模中游戏人物设计要点是什么?
  10. 生存智慧——新的生活方式
  11. 算法分析一:基础知识
  12. phpstorm根据关键字全局搜索
  13. Windwos2008如何关闭IE增强的安全配置
  14. 【课程设计】8086汇编实现打字小游戏
  15. 【C语言基础】printf函数
  16. [数论] 约数个数定理与约数和定理
  17. 科研TCO-PEG-Chondroitin sulfate;TCO-PEG-CS;反式环辛烯-聚乙二醇-硫酸软骨素
  18. 图解通信原理与案例分析-35:以太网MAC层的通信原理--MAC帧格式与调度策略:载波侦听与冲突检测CSMA/CD、载波侦听与冲突避免(信道空闲保证)CSMA/CA、流控
  19. Python 实现常见的坐标系之间的转换
  20. android备忘录教学_Android Studio-备忘录功能实现

热门文章

  1. Python: strip()和split()的用法与区别
  2. Python教程:import 、from import 及from import *
  3. Python的位置参数、默认参数、关键字参数、可变参数之间的区别
  4. 我的2020电视机选购
  5. pycharm 报错 IndentationError: unexpected unindent 解决办法
  6. python list()函数 (从可迭代对象返回初始化的新列表)
  7. python 如何巧妙利用 pypi 官网进行个人包管理(244)
  8. 什么是泛型,为什么要使用泛型? 泛型类和泛型方法的实现以及限定通配符的使用。什么是泛型擦除,为什么有泛型擦除,泛型擦除到底是怎么实现的
  9. 北理工计算机原理与应用实验,北理工计算机原理与应用实验三教程.docx
  10. proteus里面没有stm32怎么办_学习STM32日志——独立看门狗实验(20.06.23)