资讯专栏INFORMATION COLUMN

poi读取word.doc/docx 解析,定时入库

QiShare / 3380人阅读

摘要:代码结构所需依赖数据库表设计话不多说,先放代码取当前字段的下标把文件读取到流文件读取转化为段落格式文件去掉空的段落取数组长度获得天气预报的时间和判断是否包含和封装保存此段代码步骤首先解析文档,以段落的形式读取文档

springBoot代码结构:

所需pom依赖

数据库表设计

话不多说,先放代码:MeteorologicalService

public  void testReadByDoc(String path) throws Exception {
    Meteorological meteorological = new Meteorological();
    String [] content =null;
    //取当前.字段的下标
    int i = path.indexOf(".");
    //把文件读取到流
    InputStream is = new FileInputStream(path);
    if(path.length()-i==4){   //doc文件
        HWPFDocument doc = new HWPFDocument(is);
        Range range = doc.getRange();
    //读取word 转化为段落格式
        content =MeteorologicalUtil.printInfo(range);
    }else {          // docx 文件
        XWPFDocument xdoc = new XWPFDocument(is);
        content =MeteorologicalUtil.printInfox(xdoc);
    }
    //去掉空的段落
    String[] contenta = MeteorologicalUtil.removeArrayEmptyTextBackNewArray(content);  
   //取数组长度
    int len =contenta.length;
    Date time = MeteorologicalUtil.getTime(contenta);  //获得天气预报的时间
    String s = contenta[len - 6];
       if(s.contains("和")){ //判断是否包含和
           meteorological.setAlert(contenta[len-5]);
           meteorological.setWeather(contenta[len-4]);
       }
    String minimum = contenta[len - 1].substring(0, contenta[len - 1].length() - 1);
    String maximum = contenta[len - 2].substring(0, contenta[len - 2].length() - 1);
    String windforce = contenta[len - 3].substring(0, contenta[len - 3].length() - 1);
    meteorological.setWeather(contenta[len-4]);
    meteorological.setMaximum(maximum);
    meteorological.setMinimum(minimum);
    meteorological.setNowtime(time);
    meteorological.setWindforce(windforce);
    meteorologicalMapper.insert(meteorological);   //封装、保存
    is.close();
}

此段代码步骤:
首先解析word文档,以段落的形式读取文档中内容,此时拿到word文档中信息。
由于文档中可能会出现空格和回车影响我们根据段落处理文档,所以我们此时需要先去掉这些可能会对我们代码产生的影响(部分代码等下贴)
此时去重部分已经解决,这时我们可以根据我们得到的数据进行下一步处理(处理代码也等下贴)
解决完成后将得到的数据放到对象中,然后存到数据库
因为还有定时任务(spring自带的定时器)所以我们需要再加个定时器,好了 话不多说,现在开始贴处理代码。

因为代码问题,所以将一些方法提到了util工具类

public class MeteorologicalUtil {
public static  String []  printInfo(Range range) {
    //获取段落数
    int paraNum = range.numParagraphs();
    String [] paragraphArr =new String[paraNum];
    for (int i=0; i paragraphs = xwpfDocument.getParagraphs();
    for(int i =0 ;i strList= Arrays.asList(strArray);
    List strListNew=new ArrayList<>();

    for (int i = 0; i 

好了,代码已经放上去了,这时候我们就需要加上定时器了(此定时器因为是spring自带的,所以比较简单易懂)

@Configuration //声明是一个配置类
@EnableScheduling //开启定时任务
public class MeteorologicalTask {

@Autowired
MeteorologicalService meteorologicalService;

//    @Scheduled(cron = "0 0 1 * * ?")  //执行周期(每天凌晨一点执行)(不知道定时时间怎么处理,可以网上看一下 cron)
@Scheduled(cron = "*/5 * * * * ?")//每5秒执行一次
public void work() {
//文件路径
    File file = new File("C:Usersqps12Desktop气象局2");
    //获得文件夹下所有文件或者文件夹
    File[] fileList = file.listFiles();

    for (int i = 0; i < fileList.length; i++) {
        if (fileList[i].isFile()) {      //只检查文件.并且遍历
            File currentFile  = fileList[i];
            String path = currentFile.getAbsolutePath();  //当前文件的绝对路径
            try {
                meteorologicalService.testReadByDoc(path);  //执行解析、封装、保存数据
            } catch (Exception e) {
                e.printStackTrace();
                return;
            }
            currentFile.delete();   //删除文件
        }
    }
}

}
注:此方法只适用于那种格式类型几乎一致的文档处理,如果想处理一些没有规则的文档,最好还是使用模糊匹配的方法(还没研究,所以不会 哈哈),另外贴一下,我自己处理的文档:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75884.html

相关文章

  • 慕课网_《解密JAVA实现Excel导入导出》学习总结

    时间:2017年07月06日星期四说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:无学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 预备知识 基础知识 struts2框架(上传下载功能) xml解析技术(导入模板) JQuery EasyUI(前台美观) 课程目录 实现方式 定制导入模版 导入文件 导...

    enrecul101 评论0 收藏0
  • 简单好用-JAVA使用POI解析Excel

    摘要:相信使用的目前已经非常多了,我这边提供一个非常简单便利又通用的解析工具类,代码最后有示例代码。可以按照本文直接使用。 相信使用POI的目前已经非常多了,我这边提供一个非常简单便利又通用的POI解析工具类,代码最后有示例代码。可以按照本文直接使用。 import java.io.FileInputStream; import java.io.FileNotFoundException; ...

    wangjuntytl 评论0 收藏0
  • Excel大批量数据的导入和导出,如何做优化?

    摘要:并且在对的抽象中,每一行,每一个单元格都是一个对象。对支持使用官方例子需要继承,覆盖方法,每读取到一个单元格的数据则会回调次方法。概要Java对Excel的操作一般都是用POI,但是数据量大的话可能会导致频繁的FGC或OOM,这篇文章跟大家说下如果避免踩POI的坑,以及分别对于xls和xlsx文件怎么优化大批量数据的导入和导出。一次线上问题这是一次线上的问题,因为一个大数据量的Excel导出...

    Tecode 评论0 收藏0
  • Java实现excel导入导出学习笔记1 - 实现方式

    摘要:需要的技术框架利用其上传下载功能解析技术定制导入模板制作前台与格式对应,版本低,兼容性好与格式对应组成的几个概念工作薄工作表行记录单元格创建中的的详见如创建创建工作簿创建工作表创建第一行创建一个文件存盘名字性別男解析文件创建,读取文件 需要的技术 1、strut2框架 利用其上传下载功能2、xml解析技术 定制导入模板3、jquery UI 制作前台 4、showImg(/i...

    wean 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<