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 *** 最爱那水货...相关推荐

  1. linux上传文件命令ftp put,Linux ftp 命令行中下载文件get与上传文件put的命令应用详解...

    介绍:从本地以用户anok登录的机器192.168.0.16上通过ftp远程登录到192.168.0.6的ftp服务器上,登录用户名是peo.以下为使用该连接做的实验. 查看远程ftp服务器上用户pe ...

  2. Java 实现上传文件到FTP和从FTP下载文件

    在eclipse 中创建项目,并将commons-net-3.6.jar包复制到项目中 commons-net-3.6.jar:链接:https://pan.baidu.com/s/1iz0862TX ...

  3. Java 上传文件到ftp服务器

    前两篇文章我们搭建了一个ftp服务器,并对服务器进行了相应的配置,这篇文章我们来说一下我们如何上传文件. 先介绍一下项目,本项目采用的是spring mvc +spring +mybatis ,用ma ...

  4. 工作笔记1——利用bat脚本实现批量上传文件到ftp服务器

    工作笔记1--利用bat脚本实现批量上传文件到ftp服务器 问题概述 利用ftp命令实现上传文件 注意 限时功能 将共享目录映射到电脑中的某个盘符 实现断点续传 问题概述 公司中有大概225k个文件需 ...

  5. vba上传文件到ftp服务器指定目录下面

    vba上传文件到ftp服务器指定目录 +脚本形式 文章目录 1. 测试版本无校验: 2. 测试版本有检验 3. 文件不存在校验版本 4. 文件不存在校验+必填项校验版本 1. 测试版本无校验: Sub ...

  6. web上传文件到ftp服务器,web 上传文件到ftp服务器上

    web 上传文件到ftp服务器上 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分 ...

  7. java上传文件到FTP服务器

    欢迎来到小生的博客,各种工具类,常用知识点.技巧持续更新中....... 感谢大家点赞关注,希望大家能够给小生更多的支持. 祝您阅读愉快! 有任何疑问可以加小生QQ群咨询:107680366 前段时间 ...

  8. shell上传文件到服务器,shell脚本上传文件到ftp服务器

    shell脚本上传文件到ftp服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器 ...

  9. 如何使用FTP上传文件(FTP文件传输)

    使用FTP上传文件 利用FTP和云服务器进行文件传输首先需要 云服务器配置好FTP环境后,您可以通过: 1.资源管理器 2.第三方软件 与服务器进行文件传输 与服务器进行文件传输时首先要确保服务器安全 ...

最新文章

  1. org.springframework.data.redis 一次连接获取特定key所有k-v(pipeline)
  2. SVN使用之分支、合并
  3. Gotchas 44-引用和临时对象
  4. PMCAFF | 史上最完整的沙龙活动策划总结
  5. WSS中的SPSite和SPWeb为什么需要释放内存,如何快速发现代码中的未释放内存
  6. Java扑克牌(enum)
  7. stm32烧不进去程序_STM32的FLASH和SRAM的使用情况分析
  8. 使用tensorboard可视化tensorflow模型
  9. Python读取Excel文件统计演员参演电影
  10. mysql with lock tables_mysql出现大量FLUSH TABLES WITH READ LOCK
  11. html定义最小宽度,line-block的运用:最小宽度的设置
  12. 关于std::string和 C-style string的一些知识点备忘
  13. 1.SRE:Google运维解密 --- 介绍
  14. 锐起无盘服务器改dns,锐起无盘多配置教程-菜鸟版(老鸟飘过)
  15. java 链表两数相加
  16. Qt设计精美的登录注册界面(包含SQLite数据库应用)
  17. 什么是元数据(Metadata)?
  18. 《文明之光》吴军 著,读书笔记
  19. Android Push哪家强——分析豌豆荚1400个APP
  20. window系统中,交换键盘中win键和ctl键

热门文章

  1. hadoop fs命令
  2. 对JDBC操作数据库的简单封装
  3. java基础—Objcet中的equals方法重写
  4. [loss]Triphard loss优雅的写法
  5. Г函数(伽马函数)、分布
  6. sweetalert 1.0多次回调函数bug
  7. 机器学习 —— 概率图模型(推理:采样算法)
  8. MFC/VC CxImage 简单配置与使用 (完整版)
  9. hdu 4681(枚举+dp)
  10. echarts柱状图x轴 label一行超过设置的字数换行