FTP文件上傳及回執(zhí)文件下載并解析
功能簡(jiǎn)介:
操作1:將本地的訂單xml文件上傳到FTP上,然后在本地其他文件夾進(jìn)行備
份并刪除源文件。
操作2:將FTP上面其他公司上傳的訂單回執(zhí)Xml下載下來(lái)然后刪除,并將文
件解析存到數(shù)據(jù)中。
操作流程:
-
使用說(shuō)明
雙擊文件夾下的exe的執(zhí)行文件,程序就自動(dòng)運(yùn)行。關(guān)閉則需要啟動(dòng)任務(wù)管理器結(jié)束一下進(jìn)程即可。
-
注意事項(xiàng)
使用前需要在ftpConfig文件夾下的配置文件中配置好上傳和下載的路徑,否則程序會(huì)報(bào)找不到路徑的錯(cuò)誤!
- 目錄說(shuō)明
AddOrderParse.jar ——> java代碼(已安裝java環(huán)境的電腦上級(jí)即可執(zhí)行程序)
libs ——> java程序所使用的依賴庫(kù),勿操作此文件夾。
ftpConfig ——> 此文件夾下放置配置ftp的地址,用戶名和密碼。且還有相對(duì)應(yīng)的ftp上的文件路徑以及本地的文件路徑,均可再次配置。-----
注意:需要確保配置的路徑均是真實(shí)的,否則會(huì)報(bào)錯(cuò)!并且最后一個(gè)文件夾后需要加上/log ——> 此文件放置程序執(zhí)行錯(cuò)誤的日志信息。
addXml ——> 此文件為我調(diào)試用的本地的文件路徑,你可以自行在ftpConfig配置。
jre ——> 此文件夾存放的是java的運(yùn)行環(huán)境,這樣即使電腦沒(méi)有安裝java環(huán)境,也可以執(zhí)行java的程序。不過(guò)有點(diǎn)大,待優(yōu)化。
-
具體流程
開(kāi)啟了一個(gè)定時(shí)器并開(kāi)辟了兩個(gè)線程,分別用來(lái)循環(huán)執(zhí)行上傳和下載兩個(gè)任務(wù)。循環(huán)時(shí)間設(shè)置為60s。
上傳訂單文件: 循環(huán)掃描本地上的orderXml存放路徑,有則上傳至ftp上,并在本地備份此文件。
下載回執(zhí)文件: 循環(huán)掃描ftp上的回執(zhí)文件存放路徑,有則下載至本地,按照日期創(chuàng)建文件夾存放文件,所以同一天的文件會(huì)放在一個(gè)文件夾下 。然后將下載的文件進(jìn)行解析添加至數(shù)據(jù)庫(kù)的表add_receipt中,字段與xml主題字體一致,并多了一個(gè)記錄添加時(shí)間的字段。由于暫不知道篩選條件,所以目前的做法只是將所有的回執(zhí)文件解析成對(duì)象并添加,所以數(shù)據(jù)庫(kù)中會(huì)出現(xiàn)同一訂單的多個(gè)狀態(tài)。
待優(yōu)化
- 還需新增定時(shí)刪除過(guò)期文件夾的功能。
- 回執(zhí)文件沒(méi)有篩選直接添加至數(shù)據(jù)庫(kù)中,需要根據(jù)條件來(lái)更新過(guò)期的狀態(tài)。
- 日志記錄還不完善。
- 需要轉(zhuǎn)成C/S項(xiàng)目,實(shí)現(xiàn)可視化操作。
以上是寫(xiě)給公司操作人員的操作手冊(cè)
一點(diǎn)感想:
從老大讓我做這個(gè)東西到現(xiàn)在大概過(guò)了將近半個(gè)月的時(shí)間吧,其實(shí)程序不難,關(guān)鍵是前期的需求不明確,老大也是惜字如金!再加上我也只是剛學(xué)java,學(xué)我的mybatis學(xué)的開(kāi)開(kāi)心的,把我抓過(guò)來(lái)弄這個(gè),不過(guò)也是挺感謝他的。代碼這東西還是需要實(shí)戰(zhàn)的,光自己弄真的不行,感覺(jué)我這半個(gè)月了解的小知識(shí)比過(guò)去一個(gè)月看的東西掌握的還多。特別是最后需要打包成jar文件還需要轉(zhuǎn)成exe的可執(zhí)行文件并且需要將jre環(huán)境也一起打包來(lái)讓沒(méi)有安裝java環(huán)境的電腦用真的愁死我了,啥都不了解!原理不了解,做起東西來(lái)真的事倍功半啊?。?!
以上內(nèi)容寫(xiě)于22號(hào),你敢信第二天給同事用立馬就出錯(cuò)了么!?。?/h3>
真的無(wú)語(yǔ).......
因?yàn)橐粋€(gè)路徑的問(wèn)題導(dǎo)致我弄了兩天,特別我用的mac,不知道怎么連接他們加密的vpn,每次mac寫(xiě)完代碼然后打成jar包放到win下的電腦使用,然后一次次報(bào)錯(cuò)。特別本來(lái)一個(gè)小時(shí)就能弄好的問(wèn)題,耽誤了兩天!
代碼簡(jiǎn)介:
- 項(xiàng)目目錄簡(jiǎn)介:

bean層放的是bean對(duì)象。
main是含有main方法的一個(gè)主體類。
ThreadUtils主要是開(kāi)辟兩個(gè)分線程分別用來(lái)執(zhí)行上傳和下載兩個(gè)進(jìn)程,通過(guò)輸出看到兩個(gè)線程的資源的確不是平均的,而且也只是一個(gè)進(jìn)程切換來(lái)切換去的。
TimerTaskUtils是用來(lái)開(kāi)啟定時(shí)器,沒(méi)60s執(zhí)行一次任務(wù)。
mapper 和 mapperImp 這兩個(gè)是mybatis做數(shù)據(jù)持久層的實(shí)現(xiàn)。
service是上傳和下載的具體業(yè)務(wù)邏輯實(shí)現(xiàn)類。
utils是一系列的工具類,由上而下分別是:文件夾操作類、封裝了FTP常用方法的工具類、將一個(gè)map映射成一個(gè)對(duì)象的類、mybatis工廠的獲取類、XMl文件解析的工具
- map映射成對(duì)象的類是看別人博客里面的項(xiàng)目所使用的工具類,直接復(fù)制的。。。(侵刪?。。。?/li>
代碼中需要注意的地方
-
FTP連接
if (task.equals("orderXmlUpload")){ //訂單xml上傳 System.out.println("查找訂單文件" + new Date().toString()); OrderInfoDeal.orderXmlUpload(); FtpUtils.closeFtpClient(FtpUtils.getFTPClient()); }else if(task.equals("receiptXmlDownload")){ //回執(zhí)xml下載 System.out.println("查找回執(zhí)文件" + new Date().toString()); ReceiptDeal receiptDeal = new ReceiptDeal(); receiptDeal.receiptXmlDownload(); FtpUtils.closeFtpClient(FtpUtils.getFTPClient()); }
有沒(méi)有注意到我的ftp是每次循環(huán)都會(huì)關(guān)閉的,因?yàn)槟悴魂P(guān)閉的話人家傳了新的東西到ftp上面你還是用原來(lái)的連接就更新不了別人新上傳的文件了。
-
屬性文件亂碼問(wèn)題
localOrderXmlPath = new String(localOrderXmlPath.getBytes("ISO-8859-1"), "UTF-8");我把ftp的地址,用戶名還有密碼還有各種上傳下載的路徑都配置在配置文件里面。由于路徑有中文,所以直接讀出來(lái)是亂碼的,需要進(jìn)行轉(zhuǎn)碼才能正常使用。而且我是把ftp的相關(guān)配置放在外面,也就是不在src下面,這樣方便別人修改。
好吧,感覺(jué)很啰嗦但是又沒(méi)說(shuō)到重點(diǎn)。。。再次審視了下我的代碼都發(fā)現(xiàn)沒(méi)啥可說(shuō)的了。。。那就這樣吧,我把代碼上傳到github上面,有需要的小伙伴可以下載看一看,有啥問(wèn)題的可以聯(lián)系我。新手代碼有點(diǎn)渣,勿噴。