摘要:代碼結(jié)構(gòu)所需依賴數(shù)據(jù)庫表設(shè)計(jì)話不多說,先放代碼取當(dāng)前字段的下標(biāo)把文件讀取到流文件讀取轉(zhuǎn)化為段落格式文件去掉空的段落取數(shù)組長(zhǎng)度獲得天氣預(yù)報(bào)的時(shí)間和判斷是否包含和封裝保存此段代碼步驟首先解析文檔,以段落的形式讀取文檔
springBoot代碼結(jié)構(gòu):
所需pom依賴
數(shù)據(jù)庫表設(shè)計(jì)
話不多說,先放代碼:MeteorologicalService
public void testReadByDoc(String path) throws Exception { Meteorological meteorological = new Meteorological(); String [] content =null; //取當(dāng)前.字段的下標(biāo) 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 轉(zhuǎn)化為段落格式 content =MeteorologicalUtil.printInfo(range); }else { // docx 文件 XWPFDocument xdoc = new XWPFDocument(is); content =MeteorologicalUtil.printInfox(xdoc); } //去掉空的段落 String[] contenta = MeteorologicalUtil.removeArrayEmptyTextBackNewArray(content); //取數(shù)組長(zhǎng)度 int len =contenta.length; Date time = MeteorologicalUtil.getTime(contenta); //獲得天氣預(yù)報(bào)的時(shí)間 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文檔,以段落的形式讀取文檔中內(nèi)容,此時(shí)拿到word文檔中信息。
由于文檔中可能會(huì)出現(xiàn)空格和回車影響我們根據(jù)段落處理文檔,所以我們此時(shí)需要先去掉這些可能會(huì)對(duì)我們代碼產(chǎn)生的影響(部分代碼等下貼)
此時(shí)去重部分已經(jīng)解決,這時(shí)我們可以根據(jù)我們得到的數(shù)據(jù)進(jìn)行下一步處理(處理代碼也等下貼)
解決完成后將得到的數(shù)據(jù)放到對(duì)象中,然后存到數(shù)據(jù)庫
因?yàn)檫€有定時(shí)任務(wù)(spring自帶的定時(shí)器)所以我們需要再加個(gè)定時(shí)器,好了 話不多說,現(xiàn)在開始貼處理代碼。
因?yàn)榇a問題,所以將一些方法提到了util工具類
public class MeteorologicalUtil { public static String [] printInfo(Range range) { //獲取段落數(shù) int paraNum = range.numParagraphs(); String [] paragraphArr =new String[paraNum]; for (int i=0; iparagraphs = xwpfDocument.getParagraphs(); for(int i =0 ;i strList= Arrays.asList(strArray); List strListNew=new ArrayList<>(); for (int i = 0; i 好了,代碼已經(jīng)放上去了,這時(shí)候我們就需要加上定時(shí)器了(此定時(shí)器因?yàn)槭莝pring自帶的,所以比較簡(jiǎn)單易懂)
@Configuration //聲明是一個(gè)配置類 @EnableScheduling //開啟定時(shí)任務(wù) public class MeteorologicalTask { @Autowired MeteorologicalService meteorologicalService; // @Scheduled(cron = "0 0 1 * * ?") //執(zhí)行周期(每天凌晨一點(diǎn)執(zhí)行)(不知道定時(shí)時(shí)間怎么處理,可以網(wǎng)上看一下 cron) @Scheduled(cron = "*/5 * * * * ?")//每5秒執(zhí)行一次 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(); //當(dāng)前文件的絕對(duì)路徑 try { meteorologicalService.testReadByDoc(path); //執(zhí)行解析、封裝、保存數(shù)據(jù) } catch (Exception e) { e.printStackTrace(); return; } currentFile.delete(); //刪除文件 } } }}
注:此方法只適用于那種格式類型幾乎一致的文檔處理,如果想處理一些沒有規(guī)則的文檔,最好還是使用模糊匹配的方法(還沒研究,所以不會(huì) 哈哈),另外貼一下,我自己處理的文檔:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75884.html
時(shí)間:2017年07月06日星期四說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 預(yù)備知識(shí) 基礎(chǔ)知識(shí) struts2框架(上傳下載功能) xml解析技術(shù)(導(dǎo)入模板) JQuery EasyUI(前臺(tái)美觀) 課程目錄 實(shí)現(xiàn)方式 定制導(dǎo)入模版 導(dǎo)入文件 導(dǎo)...
摘要:相信使用的目前已經(jīng)非常多了,我這邊提供一個(gè)非常簡(jiǎn)單便利又通用的解析工具類,代碼最后有示例代碼??梢园凑毡疚闹苯邮褂谩? 相信使用POI的目前已經(jīng)非常多了,我這邊提供一個(gè)非常簡(jiǎn)單便利又通用的POI解析工具類,代碼最后有示例代碼。可以按照本文直接使用。 import java.io.FileInputStream; import java.io.FileNotFoundException; ...
摘要:并且在對(duì)的抽象中,每一行,每一個(gè)單元格都是一個(gè)對(duì)象。對(duì)支持使用官方例子需要繼承,覆蓋方法,每讀取到一個(gè)單元格的數(shù)據(jù)則會(huì)回調(diào)次方法。概要Java對(duì)Excel的操作一般都是用POI,但是數(shù)據(jù)量大的話可能會(huì)導(dǎo)致頻繁的FGC或OOM,這篇文章跟大家說下如果避免踩POI的坑,以及分別對(duì)于xls和xlsx文件怎么優(yōu)化大批量數(shù)據(jù)的導(dǎo)入和導(dǎo)出。一次線上問題這是一次線上的問題,因?yàn)橐粋€(gè)大數(shù)據(jù)量的Excel導(dǎo)出...
摘要:需要的技術(shù)框架利用其上傳下載功能解析技術(shù)定制導(dǎo)入模板制作前臺(tái)與格式對(duì)應(yīng),版本低,兼容性好與格式對(duì)應(yīng)組成的幾個(gè)概念工作薄工作表行記錄單元格創(chuàng)建中的的詳見如創(chuàng)建創(chuàng)建工作簿創(chuàng)建工作表創(chuàng)建第一行創(chuàng)建一個(gè)文件存盤名字性別男解析文件創(chuàng)建,讀取文件 需要的技術(shù) 1、strut2框架 利用其上傳下載功能2、xml解析技術(shù) 定制導(dǎo)入模板3、jquery UI 制作前臺(tái) 4、showImg(/i...
閱讀 1407·2021-11-08 13:14
閱讀 763·2021-09-23 11:31
閱讀 1052·2021-07-29 13:48
閱讀 2793·2019-08-29 12:29
閱讀 3387·2019-08-29 11:24
閱讀 1912·2019-08-26 12:02
閱讀 3714·2019-08-26 10:34
閱讀 3450·2019-08-23 17:07