1、导入pom 文件

        <dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.3</version></dependency><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.49</version></dependency>

2、配置文件

#==============================  ftp 服务器配置  ==================================
ftp:open: truehost: ftp1.geotmt.comusername: civpsynpassword: civpsynde#port: 21rootpath: /zxw-dev                  # zxw 数据在ftp的根目录splitstr: "!@#$"                    # ftp 文件数据分割符

3、工具类

import com.alibaba.druid.util.StringUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.io.*;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;/*** @Description ftp 工具类* @Author      yanghanwei* @Mail        yanghanwei@geotmt.com* @Date        17:54 2019-12-12* @Version     v1**/
@Component
public class FtpUtil {@Value("${ftp.host}")private String host;@Value("${ftp.port}")private int port;@Value("${ftp.username}")private String userName;@Value("${ftp.password}")private String password;private FTPClient ftp = null;private static final Logger log = LoggerFactory.getLogger(FtpUtil.class);/*** 链接 ftp 获取 ftpClient*/private void getFtpClient () {ftp = new FTPClient();try {ftp.setDefaultTimeout(20000);ftp.setDataTimeout(3600000);ftp.setConnectTimeout(60000);// 连接ftpftp.connect(host, port);// 登陆ftpftp.login(userName, password);ftp.setBufferSize(4096);ftp.setKeepAlive(true);//以二进制流的方式读取ftp.setFileType(FTPClient.BINARY_FILE_TYPE);ftp.enterLocalPassiveMode();// 判断ftp是否登录成功if (FTPReply.isPositiveCompletion(ftp.getReplyCode())) {log.info("登陆成功" + host + ":" + port);} else {log.info("登陆失败,用户名或者密码错误" + host + ":" + port);ftp.disconnect();}} catch (SocketException e) {e.printStackTrace();log.error("ftp地址可能错误");} catch (IOException e) {e.printStackTrace();log.error("ftp端口错误");}}/*** 创建ftp文件夹* @param path*/public void mkdirDir(String path){this.getFtpClient();// 分割 路径List<String> pathList = getPathList(path);try {//循环遍历创建路径for(int i=0; i<pathList.size(); i++){//若路径未存在则创建路径if(!ftp.changeWorkingDirectory(pathList.get(i))){//若路径创建失败则不再继续处理if(!ftp.makeDirectory(pathList.get(i))){log.info("create dir fail --> " + pathList.get(i));closeFtpClient();return;}}}} catch (IOException e) {e.printStackTrace();}}/*** 上传文件* @param filePath* @param fileName*/public boolean putFile(String filePath, String fileName, String ftpPath) {boolean flag = false;this.getFtpClient();try {ftp.changeWorkingDirectory(ftpPath);flag = ftp.storeFile(fileName, new FileInputStream(new File(filePath)));} catch (IOException e) {e.printStackTrace();}return flag;}/*** 创建 ftp 文件* @return*/public boolean touchFile(String folder, String fileName, InputStream is) {this.getFtpClient();boolean b = false;try {ftp.changeWorkingDirectory(folder);b = ftp.storeFile(fileName, is);} catch (IOException e) {e.printStackTrace();}return b;}/*** 删除文件夹下所有文件(待优化)* @param folder* @return*/public void deleteFolder(String folder){this.getFtpClient();if (StringUtils.isEmpty(folder)){return;}try{FTPFile[] files = ftp.listFiles(folder);if(files.length > 0) {for (FTPFile f : files){if (f.isDirectory()){String dirname = f.getName();//获取内部文件夹名称后格式化处理。判断其时间是否在当前时间的8天前int result= dirname.compareTo(folder);if (result >= 0){return;}else{//切换FTP目录,还是当前目录ftp.changeWorkingDirectory(folder);if (StringUtils.isEmpty(dirname)){return;}FTPFile[] files2 = ftp.listFiles(dirname);for (FTPFile f2 : files2){if (f2.isFile()){ftp.dele(folder+"/"+dirname+"/"+f2.getName());}else if (f2.isDirectory()){ftp.removeDirectory(folder+"/"+f2);}}ftp.removeDirectory(folder+"/"+f.getName());}}else if (f.isFile()){ftp.deleteFile(folder + "/" + f.getName());log.info("删除文件:{}", f.getName());}}}} catch (Exception e) {log.error("删除失败" + e.getMessage(), e);} finally {closeFtpClient();}}/*** 上传文件* @param filePath*/public void putFile(String filePath) {this.getFtpClient();try {OutputStream os = ftp.storeFileStream(filePath);FileInputStream fis = new FileInputStream(new File(filePath));byte[] b = new byte[1024];int len = 0;while ((len = fis.read(b)) != -1) {System.out.println(b);System.out.println(len);os.write(b,0,len);}} catch (IOException e) {log.error("输出失败" + e.getMessage(), e);} finally {closeFtpClient();}log.info("输出成功");}/*** 读取文件(并用 )* @param filePath 文件目录* @param fileName 目录下文件* @param splitStr 格式化数据的行数据分割符* @return         List<String[]>*/public List<String[]> readFile(String filePath, String fileName, String splitStr){this.getFtpClient();List<String[]> list = new ArrayList<>();StringBuffer sb = new StringBuffer();InputStream ps = null;try {ftp.setControlEncoding("UTF-8");// 改变工作空间ftp.changeWorkingDirectory(filePath);// 列出fileName下面所有文件FTPFile[] fileArr = ftp.listFiles();for (int i = 0; i < fileArr.length; i++) {FTPFile ftpFile = fileArr[i];// 如果该文件是文件夹,调用自身方法if (ftpFile.isFile())  {//读取以当天日期命名的txt文件if (ftpFile.getName().equals(fileName)) {log.info("文件名称:{}", ftpFile.getName());ps = ftp.retrieveFileStream(ftpFile.getName());if (ps != null) {BufferedReader br = new BufferedReader(new InputStreamReader(ps));String data = null;sb.append(ftpFile.getName());try {while ((data = br.readLine()) != null) {if(!StringUtils.isEmpty(data)){String[] split = data.split(replace(splitStr) );list.add(split);}log.info("文件行数据 :{}", data);}// 关闭流br.close();ftp.completePendingCommand();} catch (IOException e) {log.error("读取FTP文件异常"+e.getMessage(), e);}}}}}} catch (IOException e) {this.closeFtpClient();log.error("读取FTP文件异常"+e.getMessage(), e);} finally {if(null != ps) {try {ps.close();} catch (IOException e) {e.printStackTrace();}}}this.closeFtpClient();return list;}/*** 关闭ftp链接*/private void closeFtpClient() {try {ftp.disconnect();log.info("连接关闭");} catch (IOException e) {log.error("关闭ftp异常...", e);}}private String replace(String str) {return str.replace("$", "\\$");}/*** 分割路径*/private List<String> getPathList(String path){String[] dirs = path.split("/");List<String> list = new ArrayList<>();StringBuilder pathname = new StringBuilder();for(String str : dirs){if(StringUtils.isEmpty(str)){continue;}pathname.append("/").append(str);list.add(pathname.toString());}return list;}}

4、使用

    @Resourceprivate FtpUtil ftpUtil;public void test() {ftpUtil.readFile(fullPath, "123.txt", splitStr);}

springboot 整合 ftp 简单流程相关推荐

  1. Springboot整合Dubbo简单示例

    Springboot 整合dubbo: 1 简介 Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的 ...

  2. SpringBoot 整合WebSocket 简单实战案例

    前言 这个简单实战案例主要目的是让大家了解websocket的一些简单使用. 另外使用stomp方式的: <Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 ...

  3. SpringBoot整合Mybatis-Pius(简单易懂!)

    SpringBoot整合Mybatis-Pius 新建springboot项目 开发工具:idea2020.2,maven3 按需导入 pom.xml <?xml version="1 ...

  4. spring-boot整合FTP文件服务器

    @TOC一 一,扫盲篇:什么是FTP? FTP 服务器是支持 FTP协议的服务器.在电脑中安装FTP工具将电脑中的数据传输到服 务器当中,这时服务器就称为FTP服务器,而我们的电脑称为客户端.对于FT ...

  5. springBoot(idea)整合activiti简单流程完整示例

    最近公司在做一个带审核流程的功能,部门leader指出要集成activiti流程,而且后续的需求里也会用到.之前没有接触过经过查阅资料,自己尝试,最终走完了整个流程,记录一下自己的学习过程,如有不足之 ...

  6. 【SpringBoot】:springboot整合FTP文件上传与下载功能

    导入依赖包 <dependency><groupId>commons-net</groupId><artifactId>commons-net</ ...

  7. springboot整合ftp

    参考链接:https://www.cnblogs.com/callbin/p/15762510.html 阿里云centos7.8搭建ftp服务器 一.简介 vsftpd 全称是:very secur ...

  8. springboot整合redis 简单实现

    主要逻辑代码 restemplate使用resource注解才能正常使用 @Service public class InforServiceImpl implements InforService ...

  9. Springboot 整合Websocket+Stomp协议+RabbitMQ做消息代理 实例教程

    前言 如果你还没有了解过websocket,关于整合websocket的简单入门使用,可以先看看我这篇: <SpringBoot 整合WebSocket 简单实战案例> https://b ...

最新文章

  1. 自定义leftBarButtonItem的button
  2. 身份证校验程序(上)- 零基础入门学习Delphi48
  3. 国际顶级学术会议CIKM2019北京开幕在即,重量级嘉宾带你窥探人工智能前沿
  4. 生成器——迭代器工作的工厂
  5. [vue] EventBus注册在全局上时,路由切换时会重复触发事件,如何解决呢?
  6. jquery实现app开发闹钟功能_一款让你真正摆脱懒觉的“闹钟APP软件”
  7. ajax传递timestamp,解决ajax请求自动增加时间戳问题
  8. 8 9区别 endnote7_EndNoteX9使用进阶七:全文查找下载和统计分析
  9. 误Ghost数据恢复图文教程
  10. xbox win10测试软件,UWP APP可通过Win10商店直接安装至XboxOne主机
  11. 专访邱锡鹏:人工智能开源社区的「先行者」
  12. ZYNQ+FPGA读取SD卡BMP图片并通过HDMI显示
  13. tp-link tl-wr740n 虚拟服务器,TP-Link TL-WR740N无线wifi无线桥接怎么设置 | tplogin.cn
  14. PostGIS几何图形操作
  15. 耳穴减肥自身感受细节描述0422
  16. 华为服务器上安装vm系统,云服务器安装vm教程
  17. 民远学院99届计算机,上海民远职业技术学院计算机基础复习题及参考答案-D套...
  18. 国内SSD品牌如何异军突起
  19. 阅文集团以人民币10.8亿元出售懒人听书股权给腾讯音乐
  20. 在ubuntu环境下,开发stm32使用ram调试程序教程

热门文章

  1. 关于jav rmi介绍与安全
  2. 技术岗面试基础知识复习——计算机网络
  3. 计算机网络设计一个网络游戏,计算机网络编程课程设计-- 猜数游戏.doc
  4. 各种金融类的自定义 View,基金走势图、分时图、蜡烛图、各种指标等,一步一步构建庞大的基金自定 View...
  5. HTML学习笔记(2019.8.3)
  6. WPF DataGrid自定义样式模板 列表头分隔线 滚动条滑块大小设定 动态数据绑定和更新
  7. 民间高手:能干掉苹果的中国黑客
  8. 初一年级英语口语测试软件,七年级英语口语测试模拟试题.doc
  9. Webpack5的Module Federation是什么来头?
  10. 如何高效利用 Grafana 监控分析 TiDB 指标