学习目标:

Java解析word文档,将word文档题库导入
学会word文档的解析,以及各种题型的导入


学习内容:

解析word文档
获取正文文件内容 doc和docx两种解析

  1. 解析word文档
 public static String readWord(String path) {String buffer = "xxx.docx";try {if (path.endsWith(".doc")) {InputStream is = new FileInputStream(new File(path));WordExtractor ex = new WordExtractor(is);buffer = ex.getText();} else if (path.endsWith("docx")) {OPCPackage opcPackage = POIXMLDocument.openPackage(path);POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);buffer = extractor.getText();} else {System.out.println("此文件不是word文件!");}} catch (Exception e) {e.printStackTrace();return null;}return buffer;}

2 获取正文文件内容docx方法

 /*** 获取正文文件内容,docx方法** @param file* @return*/public static Map<String, String> getContentDocx(File file) {Map<String, String> map = new HashMap();StringBuffer content = new StringBuffer("");String result = "0";  // 0表示获取正常,1表示获取异常InputStream is = null;Logger logger = null;try {//根据需求入参也可以改为文件路径,对应的输入流部分改为new File(路径)即可is = new FileInputStream(file);// 2007版本的wordXWPFDocument xwpf = new XWPFDocument(is);    // 2007版本,仅支持docx文件处理List<XWPFParagraph> paragraphs = xwpf.getParagraphs();if (paragraphs != null && paragraphs.size() > 0) {for (XWPFParagraph paragraph : paragraphs) {if (!paragraph.getParagraphText().startsWith("    ")) {content.append(paragraph.getParagraphText().trim()).append("\r\n");} else {content.append(paragraph.getParagraphText());}}}} catch (Exception e) {logger.info("docx解析正文异常:" + e);result = "1"; // 出现异常} finally {if (is != null) {try {is.close();} catch (IOException e) {logger.info("" + e);}}map.put("result", result);map.put("content", String.valueOf(content));}return map;}
  1. 获取正文文件内容doc方法
/*** 获取正文文件内容,doc方法** @param path* @return*/public static Map<String, String> getContentDoc(String path) {Map<String, String> map = new HashMap();StringBuffer content = new StringBuffer("");String result = "0";  // 0表示获取正常,1表示获取异常InputStream is = null;Logger logger = null;try {is = new FileInputStream(new File(path));// 2003版本的wordWordExtractor extractor = new WordExtractor(is);  // 2003版本 仅doc格式文件可处理,docx文件不可处理String[] paragraphText = extractor.getParagraphText();   // 获取段落,段落缩进无法获取,可以在前添加空格填充if (paragraphText != null && paragraphText.length > 0) {for (String paragraph : paragraphText) {if (!paragraph.startsWith("    ")) {content.append(paragraph.trim()).append("\r\n");} else {content.append(paragraph);}}}} catch (Exception e) {//logger.info("doc解析正文异常:" + e);result = "1"; // 出现异常} finally {if (is != null) {try {is.close();} catch (IOException e) {logger.info("" + e);}}map.put("result", result);map.put("content", content.toString());}return map;}
  1. 利用正则表达式,解析选择题多选题
public static List<Questions> readWord2003(InputStream stream) throws IOException {HWPFDocument doc = new HWPFDocument(stream);Range r = doc.getRange();// 得到文档的读取范围List<Questions> questions=new ArrayList<Questions>();for (int i = 0; i < r.numParagraphs(); i++) {Paragraph p = r.getParagraph(i);// 获取段落//获取第一段Paragraph p1=r.getParagraph(0);String str=p.text();//获取段落内容String nr=p1.text();if(nr.contains("选择题")){if(str.length()>6){String[] strings1=str.split("\\d\\.");for(int k=0;k<strings1.length;k++){String dluo=strings1[k];if(dluo.length()>6){String[] sz=dluo.split("\u000B");//获取题干String tmw=sz[0].replaceAll("\\(.*?\\)|\\{.*?}|\\[.*?]|(.*?)", "()");//选项内容List<String> options=new ArrayList<String>();//获取答案List<String> qz= extractMessageByRegular(sz[0]);String ans=qz.get(0).trim();if(ans.equals("A")){ans=String.valueOf(1);}if(ans.equals("B")){ans=String.valueOf(2);}if(ans.equals("C")){ans=String.valueOf(3);}if(ans.equals("D")){ans=String.valueOf(4);}for(int h=1;h< sz.length;h++){//获取选项String[] xuanX=sz[h].split("\\D\\.");for(int f=1;f<xuanX.length;f++){options.add(xuanX[f]);}}Questions questionsOne=new Questions();questionsOne.setQtType(String.valueOf(1));questionsOne.setQtContent(tmw);questionsOne.setQtOp1(options.get(0));questionsOne.setQtOp2(options.get(1));questionsOne.setQtOp3(options.get(2));questionsOne.setQtOp4(options.get(3));questionsOne.setQtAnsw(ans);questions.add(questionsOne);}}}}if(nr.contains("多选题")){if(str.length()>8){String[] strings1=str.split("\\d\\.");for(int k=0;k<strings1.length;k++){String dluo=strings1[k];if(dluo.length()>6){String[] sz=dluo.split("\u000B");//获取题干String tmw=sz[0].replaceAll("\\(.*?\\)|\\{.*?}|\\[.*?]|(.*?)", "()");//选项内容List<String> options=new ArrayList<String>();//获取答案List<String> qz= extractMessageByRegular(sz[0]);String solution= qz.get(0).trim();List<String> list = new ArrayList<String>(); //定义对象依次存放每一个字符for(int n = 0; n < solution.length() ; n++){String ss = solution.substring(n,n+1);if(ss.equals("A")){ss="1";}if(ss.equals("B")){ss="2";}if(ss.equals("C")){ss="3";}if(ss.equals("D")){ss="4";}list.add(ss);}String key= Joiner.on("|").join(list);for(int h=1;h<sz.length;h++){//获取选项String[] xuanX=sz[h].split("\\D\\.");for(int f=1;f<xuanX.length;f++){options.add(xuanX[f]);}}Questions questionsOne=new Questions();questionsOne.setQtType(String.valueOf(1));questionsOne.setQtContent(tmw);try {questionsOne.setQtOp1(options.get(0));questionsOne.setQtOp2(options.get(1));questionsOne.setQtOp3(options.get(2));questionsOne.setQtOp4(options.get(3));}catch (Exception e){System.out.println(options);}questionsOne.setQtAnsw(key);questions.add(questionsOne);}}}}}return questions;}
  1. main方法调用测试
public class ImportWordPoiServiceImpl {public static void main(String[] args) throws FileNotFoundException {String path="/Users/liukun/Downloads/";readWord(path);getContentDoc(path);}

Java解析word文档,将word文档题库选择题导入相关推荐

  1. phpems考试系统如何处理word txt题库并导入系统

    基本系统安装不说了,直接说如何处理题库数据成csv格式 假如有如下题库: 关于查询.冻结,下列说法错误的是( ).答案是:A A.向金融机构查询犯罪嫌疑人的存款,应当经办案部门负责人批准 B.犯罪嫌疑 ...

  2. 二级c语言上机题库及解析,2013年计算机二级C语言上机题库及答案解析(3)

    填空题 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找含有形参substr所指子串的所有字符串并输出,若没找到则输出相应信息.ss所指字符串数组中共有N个字符串,且串长小于M.程序中 ...

  3. java机试题下载_java开发机试题(总题库).pdf

    java开发机试题(总题库) 平安Java 开发机试题 一.单选题 1. 关于WORKNET,下列描述错误的是? 应用系统必须是通过UM 认证才能使用WORKNET WORKNET-ENGINE 是核 ...

  4. java软件怎么调中文,附赠课程+题库

    专题1:JavaOOP 1.什么是B/S架构?什么是C/S架构 2.Java都有哪些开发平台? 3.什么是JDK?什么是JRE? 4.Java语言有哪些特点 5.面向对象和面向过程的区别 6.什么是数 ...

  5. js逆向 签名参数解析 驾考数据科目一科目三题库爬虫分享 python scrapy

    注:本篇意在学习,如有侵权,请联系删除 之前有用selenium抓取科目一试题,但是只能抓到题干和试题答案,抓不到试题分析还有答题技巧,因为接口中有一个叫做   _r     的签名参数是加密过的,扣 ...

  6. 湖南大学大学计算机基础教程,湖南大学计算机基础试题题库及答案(26页)-原创力文档...

    WORD格式 大学计算机基础>试题题库及答案 一.单选题练习 1.完整的计算机系统由(C)组成. A.运算器.控制器.存储器.输入设备和输出设备 B.主机和外部设备 C.硬件系统和软件系统 D. ...

  7. word使用计算机题,巧用Word编题库

    题库建设是教育资源建设的重要组成部分,同时也是中小学一线学科教师日常教学研究和考试研究的重要途径和抓手.本文讲述Word 2010技巧在编写题库中的具体应用. 目前网络上流行多款基于数据库技术并以Mi ...

  8. IDEA Java解析GeoJson.json文件

    IDEA Java解析GeoJson.json文件 一.遇到的问题 1. 无法导入成功 2. org.geotools.StyleFactory is not an ImageIO SPI class ...

  9. 刷题神器怎么导入java,怎么导题库_有没有比较好的可以自己导入题库进行模拟考试练习的软件_淘题吧...

    ① 本人有一题库,怎么把里面的试题全部导出 题库都加密了,没有导出功能.只能固定抽题后,整理出来. ② 在线考试系统题库怎么导入数据库 优考试的考试系统导入题库是用word和excel的模板去编辑试题 ...

最新文章

  1. 为什么会出现__pycache__文件夹?
  2. 【新手向】jQuery Mobile中动态加载或执行脚本的分析
  3. html5中的一些标签学习总结
  4. 程序员生活之路--来自程序员爸爸的一封信
  5. [vue-cli]vue-cli提供了的哪几种脚手架模板?
  6. Extjs 之 initComponent 和 constructor的区别(转)
  7. Linux C文件编译
  8. 虎虎生威,挑战云上魔方(活动期完成可得实物魔方)
  9. ROS机器人操作系统 优缺点分析
  10. plc控制电机实验报告_PLC控制步进电机实验报告
  11. eda交通灯控制器波形输入_EDA 基于quartus平台制作的步行街自助式交通灯控制器(含vhdl程序、波形图、及电路原理图)+课程设计报告...
  12. 并集、交集、差集、补集的概念是什么?
  13. linux ftp客户端 pasv 227,FileZilla客户端连接腾讯云FTP服务器时出现“227 Entering Passive Mode”...
  14. Clouda聊天室实践
  15. c++编程迷宫小游戏
  16. Treeview 无限分类非递归终极解决方案VB
  17. 穷举、贪心算法--泊松分酒(2)
  18. 两英中学2021高考成绩查询,2021年广东高中排名,高中高考成绩排名一览表
  19. html做表格(个人简历)
  20. mysql 按中文字段排序

热门文章

  1. 强烈推荐-这个方法让chrome浏览器拓展程序打包成.crx文件最快?
  2. 威斯康星麦迪逊计算机专业排名,威斯康星大学麦迪逊分校计算机工程排名
  3. redis之python(二):zadd命令出现错误:AttributeError: 'str' object has no attribute 'iteritems'
  4. postgresql整理
  5. 计算机未响应硬盘,最近电脑打开磁盘或文件夹老程序未响应为什么啊,有什么办法可以解决?...
  6. (个体户)注册公众平台步骤
  7. 我开发了一款软件,完成了舔狗的绝地反杀(代码开源)!
  8. 正则表达式 取最后一个 . 然后进行匹配
  9. 固定表头和第一列、内容可滚动的table表格
  10. krpano中视角js动态指向