FTP文件上传及回执文件下载并解析
功能简介:
操作1:将本地的订单xml文件上传到FTP上,然后在本地其他文件夹进行备
份并删除源文件。
操作2:将FTP上面其他公司上传的订单回执Xml下载下来然后删除,并将文
件解析存到数据中。
操作流程:
-
使用说明
双击文件夹下的exe的执行文件,程序就自动运行。关闭则需要启动任务管理器结束一下进程即可。
-
注意事项
使用前需要在ftpConfig文件夹下的配置文件中配置好上传和下载的路径,否则程序会报找不到路径的错误!
- 目录说明
AddOrderParse.jar ——> java代码(已安装java环境的电脑上级即可执行程序)
libs ——> java程序所使用的依赖库,勿操作此文件夹。
ftpConfig ——> 此文件夹下放置配置ftp的地址,用户名和密码。且还有相对应的ftp上的文件路径以及本地的文件路径,均可再次配置。-----
注意:需要确保配置的路径均是真实的,否则会报错!并且最后一个文件夹后需要加上/log ——> 此文件放置程序执行错误的日志信息。
addXml ——> 此文件为我调试用的本地的文件路径,你可以自行在ftpConfig配置。
jre ——> 此文件夹存放的是java的运行环境,这样即使电脑没有安装java环境,也可以执行java的程序。不过有点大,待优化。
-
具体流程
开启了一个定时器并开辟了两个线程,分别用来循环执行上传和下载两个任务。循环时间设置为60s。
上传订单文件: 循环扫描本地上的orderXml存放路径,有则上传至ftp上,并在本地备份此文件。
下载回执文件: 循环扫描ftp上的回执文件存放路径,有则下载至本地,按照日期创建文件夹存放文件,所以同一天的文件会放在一个文件夹下 。然后将下载的文件进行解析添加至数据库的表add_receipt中,字段与xml主题字体一致,并多了一个记录添加时间的字段。由于暂不知道筛选条件,所以目前的做法只是将所有的回执文件解析成对象并添加,所以数据库中会出现同一订单的多个状态。
待优化
- 还需新增定时删除过期文件夹的功能。
- 回执文件没有筛选直接添加至数据库中,需要根据条件来更新过期的状态。
- 日志记录还不完善。
- 需要转成C/S项目,实现可视化操作。
以上是写给公司操作人员的操作手册
一点感想:
从老大让我做这个东西到现在大概过了将近半个月的时间吧,其实程序不难,关键是前期的需求不明确,老大也是惜字如金!再加上我也只是刚学java,学我的mybatis学的开开心的,把我抓过来弄这个,不过也是挺感谢他的。代码这东西还是需要实战的,光自己弄真的不行,感觉我这半个月了解的小知识比过去一个月看的东西掌握的还多。特别是最后需要打包成jar文件还需要转成exe的可执行文件并且需要将jre环境也一起打包来让没有安装java环境的电脑用真的愁死我了,啥都不了解!原理不了解,做起东西来真的事倍功半啊!!!
以上内容写于22号,你敢信第二天给同事用立马就出错了么!!!
真的无语.......
因为一个路径的问题导致我弄了两天,特别我用的mac,不知道怎么连接他们加密的vpn,每次mac写完代码然后打成jar包放到win下的电脑使用,然后一次次报错。特别本来一个小时就能弄好的问题,耽误了两天!
代码简介:
- 项目目录简介:
bean层放的是bean对象。
main是含有main方法的一个主体类。
ThreadUtils主要是开辟两个分线程分别用来执行上传和下载两个进程,通过输出看到两个线程的资源的确不是平均的,而且也只是一个进程切换来切换去的。
TimerTaskUtils是用来开启定时器,没60s执行一次任务。
mapper 和 mapperImp 这两个是mybatis做数据持久层的实现。
service是上传和下载的具体业务逻辑实现类。
utils是一系列的工具类,由上而下分别是:文件夹操作类、封装了FTP常用方法的工具类、将一个map映射成一个对象的类、mybatis工厂的获取类、XMl文件解析的工具
- map映射成对象的类是看别人博客里面的项目所使用的工具类,直接复制的。。。(侵删!!!)
代码中需要注意的地方
-
FTP连接
if (task.equals("orderXmlUpload")){ //订单xml上传 System.out.println("查找订单文件" + new Date().toString()); OrderInfoDeal.orderXmlUpload(); FtpUtils.closeFtpClient(FtpUtils.getFTPClient()); }else if(task.equals("receiptXmlDownload")){ //回执xml下载 System.out.println("查找回执文件" + new Date().toString()); ReceiptDeal receiptDeal = new ReceiptDeal(); receiptDeal.receiptXmlDownload(); FtpUtils.closeFtpClient(FtpUtils.getFTPClient()); }
有没有注意到我的ftp是每次循环都会关闭的,因为你不关闭的话人家传了新的东西到ftp上面你还是用原来的连接就更新不了别人新上传的文件了。
-
属性文件乱码问题
localOrderXmlPath = new String(localOrderXmlPath.getBytes("ISO-8859-1"), "UTF-8");
我把ftp的地址,用户名还有密码还有各种上传下载的路径都配置在配置文件里面。由于路径有中文,所以直接读出来是乱码的,需要进行转码才能正常使用。而且我是把ftp的相关配置放在外面,也就是不在src下面,这样方便别人修改。
好吧,感觉很啰嗦但是又没说到重点。。。再次审视了下我的代码都发现没啥可说的了。。。那就这样吧,我把代码上传到github上面,有需要的小伙伴可以下载看一看,有啥问题的可以联系我。新手代码有点渣,勿喷。
联系方式
- github: 大猫传说中的gitHud地址
- 邮箱: 不经常用,回复慢的话请原谅1974469025@qq.com