ftp 根据特定正则匹配文件名 下载到本地 并且上传文件到ftp java *** 最爱那水货...
1 /** 2 * 建立FTP链接,FTP服务器地址、端口、登陆用户信息都在配置里配置即可。 3 * @throws IOException 4 */ 5 public boolean connectFtp(String ftpAddress, String ftpPort, String frpUserName, String frpPassword) throws IOException{ 6 log.info("*****连接FTP服务器...*****"); 7 try{ 8 ftpClient.connect(ftpAddress, Integer.valueOf(ftpPort).intValue()); 9 ftpClient.setControlEncoding("GB2312"); 10 int reply = ftpClient.getReplyCode(); 11 if(FTPReply.isPositiveCompletion(reply)){ 12 if(ftpClient.login(frpUserName,frpPassword)){ 13 log.info("*****连接FTP服务器成功!*****"); 14 return true; 15 } 16 }else{ 17 log.error("*****连接失败!响应代码为【"+ reply+"】*****"); 18 } 19 disconnect(); 20 }catch (Exception e) { 21 log.error("*****连接失败:" + e.getMessage()); 22 } 23 return false; 24 } 25 26 /** 27 * 设置FTP客户端 被动模式、数据模式为二进制、字符编码GBK 28 */ 29 public void setConnectType(){ 30 try { 31 ftpClient.enterLocalPassiveMode(); 32 ftpClient.setDefaultTimeout(1000 * 120);//120秒 33 ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 34 ftpClient.setControlEncoding("GB2312"); 35 } catch (IOException e) { 36 e.printStackTrace(); 37 } 38 } 39 40 41 /** 42 * 断开与远程服务器的连接 43 * @throws IOException 44 */ 45 public void disconnect() { 46 if(ftpClient.isConnected()){ 47 try { 48 ftpClient.disconnect(); 49 } catch (IOException e) { 50 e.printStackTrace(); 51 } 52 } 53 } 54 55 56 /** 57 * 过滤不符合的文件并批量下载 58 * @param remoteFileReg 文件前缀的正则表达式 59 * @param localPath 本地路径 .property 文件配置 60 * @param remote_down_path ftp文件路径 61 * @return List 下载到本地的文件路径 集合 62 * @throws IOException 63 */ 64 @SuppressWarnings("unchecked") 65 public List downloads(String remoteFileReg,String localPath,String remote_down_path) throws IOException{ 66 List<String> fileNames = new ArrayList<String>(); 67 log.info("*****转移到服务器目录:" + remote_down_path); 68 setConnectType(); 69 boolean changeFlag = ftpClient.changeWorkingDirectory(remote_down_path); 70 FTPFile[] files = ftpClient.listFiles(); 71 //String[] names = ftpClient.listNames(); 72 log.info("*****改变目录是否成功:" + changeFlag); 73 log.info("*****服务器上report目录下所有校验报告的文件数为:【" +files.length + "】" ); 74 if(files.length == 0){ 75 log.info("*****未在服务器上找到文件!*****"); 76 return null; 77 }else{//目录下有文件 78 //把 bak文件的前缀找出来 ,区分读取和未读取的xls 和 xlsx ,只下载 未读取的文件 79 List<String> bakList = new ArrayList<String>(); 80 List<String> list = new ArrayList<String>(); 81 82 for (int i = 0; i < files.length; i++) { 83 FTPFile ftpFile = files[i]; 84 String fileName = ftpFile.getName(); 85 86 if(!fileName.endsWith(".bak") && ftpFile == null){ 87 log.info("******* "+ fileName + "文件无数据!"); 88 continue; 89 } 90 //匹配指定的文件前缀 和后缀 为 .bak 格式的文件 91 //bak 文件是文件读取完毕后生成的标记文件 92 Pattern bak = Pattern.compile("^"+remoteFileReg+"\\.bak"); 93 Matcher m = bak.matcher(fileName); 94 if (m.find()) { 95 //取.bak文件的 前缀 96 //System.out.println(fileName); 97 //System.out.println(fileName.split("\\.")[0]); 98 bakList.add(fileName.split("\\.")[0]); 99 continue; 100 } 101 102 //匹配指定的文件前缀 和后缀 为 .xls .xlsx 格式的文件 103 //TODO 以后遇到其他的格式文件 需要把后缀抽出来作为参数传入 104 Pattern xls = Pattern.compile("^"+remoteFileReg+"\\.xls$"+"|"+"^"+remoteFileReg+"\\.xlsx$"+"|"+"^"+remoteFileReg+"\\.csv$"); 105 Matcher mm = xls.matcher(fileName); 106 if(mm.find()){ 107 list.add(fileName); 108 continue; 109 } 110 } 111 112 Iterator<String> it = list.iterator(); 113 while (it.hasNext()) { 114 String xls = it.next(); 115 for (int i = 0; i < bakList.size(); i++) { 116 String bak = bakList.get(i); 117 //bak文件存在 , 去掉此文件 118 if (xls.indexOf(bak) !=-1) { 119 it.remove(); 120 bakList.remove(i); 121 } 122 } 123 } 124 125 126 for (String fFile : list) { 127 //下载未读取的文件 128 File downFile = new File(localPath + fFile); 129 //System.out.println(localPath); 130 File downPath = new File(localPath); 131 if(!downPath.exists()){ 132 downPath.mkdirs(); 133 } 134 String fileDir = remote_down_path + fFile; 135 OutputStream os = new FileOutputStream(downFile); 136 ftpClient.retrieveFile(new String(fileDir.getBytes("GB2312"),"ISO-8859-1"), os); 137 log.info("*****文件已下载到:" + downFile.getAbsolutePath() + "******"); 138 fileNames.add(downFile.getAbsolutePath()); 139 os.close(); 140 } 141 log.info("**** 此次共下载了【"+list.size()+"】个文件! *****"); 142 } 143 return fileNames; 144 } 145 146 /** 147 * 上传标志文件 148 * @param remoteFile 149 * @param localFile 150 * @return 151 */ 152 public boolean upload(String localFileName,String remoteFileName){ 153 154 boolean b = false; 155 try { 156 File file = new File(localFileName); 157 FileInputStream input = new FileInputStream(file); 158 b = ftpClient.changeWorkingDirectory(remoteFileName); 159 log.info("*****改变目录是否成功:" + b); 160 String remoteFile = remoteFileName + file.getName(); 161 b = ftpClient.storeFile(new String(remoteFile.getBytes("GB2312"),"ISO-8859-1"), input); 162 if(b){ 163 log.info(" ****** 标志文件"+localFileName+"上传成功!"); 164 } 165 input.close(); 166 } catch (FileNotFoundException e) { 167 e.printStackTrace(); 168 } catch (IOException e) { 169 e.printStackTrace(); 170 } 171 return b; 172 } 173
转载于:https://www.cnblogs.com/chinazhou-wang/p/5910042.html
ftp 根据特定正则匹配文件名 下载到本地 并且上传文件到ftp java *** 最爱那水货...相关推荐
- linux上传文件命令ftp put,Linux ftp 命令行中下载文件get与上传文件put的命令应用详解...
介绍:从本地以用户anok登录的机器192.168.0.16上通过ftp远程登录到192.168.0.6的ftp服务器上,登录用户名是peo.以下为使用该连接做的实验. 查看远程ftp服务器上用户pe ...
- Java 实现上传文件到FTP和从FTP下载文件
在eclipse 中创建项目,并将commons-net-3.6.jar包复制到项目中 commons-net-3.6.jar:链接:https://pan.baidu.com/s/1iz0862TX ...
- Java 上传文件到ftp服务器
前两篇文章我们搭建了一个ftp服务器,并对服务器进行了相应的配置,这篇文章我们来说一下我们如何上传文件. 先介绍一下项目,本项目采用的是spring mvc +spring +mybatis ,用ma ...
- 工作笔记1——利用bat脚本实现批量上传文件到ftp服务器
工作笔记1--利用bat脚本实现批量上传文件到ftp服务器 问题概述 利用ftp命令实现上传文件 注意 限时功能 将共享目录映射到电脑中的某个盘符 实现断点续传 问题概述 公司中有大概225k个文件需 ...
- vba上传文件到ftp服务器指定目录下面
vba上传文件到ftp服务器指定目录 +脚本形式 文章目录 1. 测试版本无校验: 2. 测试版本有检验 3. 文件不存在校验版本 4. 文件不存在校验+必填项校验版本 1. 测试版本无校验: Sub ...
- web上传文件到ftp服务器,web 上传文件到ftp服务器上
web 上传文件到ftp服务器上 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分 ...
- java上传文件到FTP服务器
欢迎来到小生的博客,各种工具类,常用知识点.技巧持续更新中....... 感谢大家点赞关注,希望大家能够给小生更多的支持. 祝您阅读愉快! 有任何疑问可以加小生QQ群咨询:107680366 前段时间 ...
- shell上传文件到服务器,shell脚本上传文件到ftp服务器
shell脚本上传文件到ftp服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器 ...
- 如何使用FTP上传文件(FTP文件传输)
使用FTP上传文件 利用FTP和云服务器进行文件传输首先需要 云服务器配置好FTP环境后,您可以通过: 1.资源管理器 2.第三方软件 与服务器进行文件传输 与服务器进行文件传输时首先要确保服务器安全 ...
最新文章
- org.springframework.data.redis 一次连接获取特定key所有k-v(pipeline)
- SVN使用之分支、合并
- Gotchas 44-引用和临时对象
- PMCAFF | 史上最完整的沙龙活动策划总结
- WSS中的SPSite和SPWeb为什么需要释放内存,如何快速发现代码中的未释放内存
- Java扑克牌(enum)
- stm32烧不进去程序_STM32的FLASH和SRAM的使用情况分析
- 使用tensorboard可视化tensorflow模型
- Python读取Excel文件统计演员参演电影
- mysql with lock tables_mysql出现大量FLUSH TABLES WITH READ LOCK
- html定义最小宽度,line-block的运用:最小宽度的设置
- 关于std::string和 C-style string的一些知识点备忘
- 1.SRE:Google运维解密 --- 介绍
- 锐起无盘服务器改dns,锐起无盘多配置教程-菜鸟版(老鸟飘过)
- java 链表两数相加
- Qt设计精美的登录注册界面(包含SQLite数据库应用)
- 什么是元数据(Metadata)?
- 《文明之光》吴军 著,读书笔记
- Android Push哪家强——分析豌豆荚1400个APP
- window系统中,交换键盘中win键和ctl键