解析word文档,获取相应的数据,并封装成相应的javaBean(一)
来源:互联网 发布:淘宝买家秀活动规则 编辑:程序博客网 时间:2024/05/29 18:34
在实际开发环境中,我们经常会向数据库导入数据,但是通常都会从页面获取数导入数据库,但是这种方式效率低下,有时并不能满足我们的实际需求,因此我们需要将word文本中的数据解析出来,然后封装成相应的javaBean,这样通常效率更高。因此,作为一个java开发工程师,这可能是我们必备的技能,我这里使用的apache组织的开源框架poi解析word文档,这里只展示最初级的读取(文档中无图片,无公式),后续将展示带图片的文档解析!
package com.ilike.poi;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Range;
import com.ilike.domain.Chapter;
/**
* 解析word文档,获取相应的数据,并封装成一个javaBean
*
* @author 桑伟东
*
*/
public class wordToHtmlDemo3 {
public static String readFile = “D:\tmp\old_doc\swdTest2.doc”;
public static String ziful = “【”;
public static String zifur = “】”;
public static void main(String[] args) throws Exception { List<Integer> points = readFilePoints(readFile); Map<String, String> map = AnalysePoints(points, readFile); assembleBean(new Chapter(), map);}/** * 1.获取文档中需要解析的所有节点 * * @param fileName * @throws Exception */public static List<Integer> readFilePoints(String fileName) throws Exception { // 1.创建字节输入流读取要解析的文档 FileInputStream in = new FileInputStream(new File(fileName)); // 2.创建文档对象 HWPFDocument doc = new HWPFDocument(in); // 3.取得文档中字符的总数 int length = doc.characterLength(); // 4.读取文档的所有要解析的节点 List<Integer> indexs = new ArrayList<Integer>(); for (int i = 0; i < length; i++) { // 4.1获取每一个字符 Range range = new Range(i, i + 1, doc); CharacterRun cr = range.getCharacterRun(0); String text = cr.text(); if (ziful.equals(text)) { indexs.add(i + 1); } if (zifur.equals(text)) { indexs.add(i); } if (i == length - 1) { indexs.add(i); } } System.out.println(indexs); // [4, 6, 20, 22, 35, 37, 62] return indexs;}/** * 2.获取对应节点的值,并封装在map集合中 * * @param points * @param fileName * @throws Exception */// [4, 6, 20, 22, 35, 37, 62]public static Map<String, String> AnalysePoints(List<Integer> points, String fileName) throws Exception { if (points.size() < 1) { System.out.println("节点异常,不能解析"); } // 1.创建字节输入流读取要解析的文档 FileInputStream in = new FileInputStream(new File(fileName)); // 2.创建文档对象 HWPFDocument doc = new HWPFDocument(in); // 3.获取对应节点的值,并封装在map集合中 Map<String, String> map = new HashMap<String, String>(); for (int i = 0; i < points.size() - 2; i += 2) { Range range1 = new Range(points.get(i), points.get(i + 1), doc); CharacterRun cr1 = range1.getCharacterRun(0); String key = cr1.text();// 获取key值 Range range2 = new Range(points.get(i + 1) + 1, points.get(i + 2), doc); CharacterRun cr2 = range2.getCharacterRun(0); String value = cr2.text();// 获取value值 map.put(key, value); System.out.println("key:" + key + "------" + "value:" + value); } return map;}/** * 3.将解析好的数据封装成相应的Bean * * @param chapter * @param map */public static void assembleBean(Chapter chapter, Map<String, String> map) { //遍历map集合,封装成相应的Bean for (String key : map.keySet()) { if (key.equals("分析")) { chapter.setAnalyse(map.get(key)); } else if (key.equals("考点")) { chapter.setKeys(map.get(key)); } else if (key.equals("解答")) { chapter.setAnswer(map.get(key)); } } System.out.println(chapter);}
}
阅读全文
0 0
- 解析word文档,获取相应的数据,并封装成相应的javaBean(一)
- 解析word文档,获取相应的数据,并封装成相应的javaBean(二)
- Java接收Cordys中webservice接口的返回数据并解析xml获取相应节点数据
- 按权重随机获取相应的数据
- MongoDB group by max 分组查询组内最大的数据,并获取相应的数据
- 获取手机里所有的app并点击相应的图标开启相应的程序
- Java POI --- Java导入excel文档的相应列的数据到数据库的相应字段
- C++读取txt文档内容并截取相应的字符串
- Delphi中的数据添加到Word模板的相应位置
- 使用vb.net获取相应文件夹下相应文件的个数并显示
- JTable相应鼠标事件,并获取被点击相应行的所有值
- js获取radio的值并做相应的跳转
- 获取字符串每个字符并给予相应的赋值
- window获取系统默认浏览器并打开相应的网址
- ios获取当前时间,并对时间的相应处理
- jsp获取随机数并跳转到相应的jsp
- Bmob查询获取不到相应的数据的问题
- 数据插入数据库中获取相应的主键值
- 2674 3-5 学生成绩统计
- 括号配对问题
- Oracle数据库导入导出备份
- 集合ArrayList中删除重复元素两种方法
- ionic轮播
- 解析word文档,获取相应的数据,并封装成相应的javaBean(一)
- 初识vue(一):相关知识介绍
- 【TensorBoard】如何启动tensorboard的详尽步骤
- Spring的事件发布机制
- 2675 3-6 静态数据成员与静态成员函数
- AsyncTask 工具类
- Bs总结
- HTTP通信的概念
- 分布式事务