springboot整合FTP读写文件服务器文件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

springboot整合FTP读写文件服务器文件。


一、FTP是什么?

文件传输协议(英语:File Transfer Protocol,缩写:FTP)是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议。

二、使用步骤

1.项目pom引入库

代码如下(示例):

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version>
</dependency>

创建配置类 FtpProperty.class

package com.jajachina.zcgpmes.ftp;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author : nan
 * @version : 1.0
 * @description : ftp配置
 * @date : Created in 2023-06-27 14:06
 * @modified By :
 */
@Component
@ConfigurationProperties(prefix = "ftp")
@Data
public class FtpProperty {
    /**
     * ftp服务器地址
     */
    public String host;
    /**
     * ftp服务器端口号默认为 21
     */
    public Integer port;
    /**
     * ftp登录账号
     */
    public String username;
    /**
     * ftp登录密码
     */
    public String password;

}

创建配置文件 ftp.properties

#ftp服务器ip
ftp.host=127.0.0.1
#ftp服务器端口
ftp.port=21
#ftp服务器用户名
ftp.username=adm
#ftp服务器密码
ftp.password=adm

2.读写文件

创建测试类 FtpService.class
代码如下(示例):

package com.jajachina.zcgpmes.ftp;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.ftp.Ftp;
import cn.hutool.extra.ftp.FtpMode;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.jajachina.zcgpmes.bean.ResultInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;

/**
 * @author : nan
 * @version : 1.0
 * @description :
 * @date : Created in 2023-06-25 17:24
 * @modified By :
 */
@Service
@Slf4j
public class FtpService {
    @Resource
    private FtpProperty ftpProperty;

    /**
     * 获取ftp文件流转为文件
     *
     * @return 文件列表
     */
    public List<File> getFile(String path) {
        return getFtpFile(path);
    }


    /**
     * 读取 FTP 文件
     *
     * @return 文件
     */
    public List<File> getFtpFile(String path) {
        List<File> files = Lists.newArrayList();
        try {
            Ftp ftp = new Ftp(ftpProperty.getHost(), ftpProperty.getPort(), ftpProperty.getUsername(), ftpProperty.getPassword());
            //设置被动模式
            ftp.setMode(FtpMode.Passive);
            //路径需要加 /
            String fileName = "pictures.txt";
            log.info("FTP当前目录:{}" + ftp.pwd());
            ResultInfo.Picture picture = readFileData(ftp, path, fileName);
            if (ObjectUtil.isEmpty(picture)) {
                log.error("读取文件:{}不存在", fileName);
                return files;
            }
            List<String> fileNames = picture.getFileNames();
            if (CollUtil.isEmpty(fileNames)) {
                log.error("读取文件:{}内容为空", fileNames);
                return files;
            }
            for (String name : fileNames) {
                //String destPath = String.format("D:\\Program Files (x86)\\FTP\\backups\\%s\\%s%s", DateUtil.today(), gpCode, path);
                String destPath = path.concat("/").concat(name);
                boolean existFile = ftp.existFile(destPath);
                if (existFile) {
                    File file = new File(destPath);
                    //写入到文件
                    ftp.download(path, name, file);
                    log.info("下载文件:{},长度:{}", file.getName(), file.length());
                    files.add(file);
                } else {
                    log.error("文件:{}中,文件:{}不存在", fileName, destPath);
                }
            }
            log.info("读取FTP 路径:{}下文件列表:{}", path, files);
            ftp.close();
        } catch (IOException e) {
            log.error("读取 FTP 文件异常", e);
        }
        return files;
    }

    /**
     * 删除文件夹
     *
     * @param path 文件夹
     */
    public void deleteDir(String path) {
        try {
            Ftp ftp = new Ftp(ftpProperty.getHost(), ftpProperty.getPort(), ftpProperty.getUsername(), ftpProperty.getPassword());
            //设置被动模式
            ftp.setMode(FtpMode.Passive);
            boolean delDir = ftp.delDir(path);
            ftp.close();
            log.info("删除FTP文件夹:{},状态:{}", path, delDir);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一款优秀的Java框架,在处理文件上传、下载等操作时,需要用到FTP连接池来提高效率和稳定性。FTP连接池是一种用于缓存和管理FTP连接的技术,通过减少连接的创建和销毁,可以大大提高FTP客户端的性能和可靠性。 使用Spring Boot来实现FTP连接池非常简单,只需要在配置文件中增加相应的配置项即可。首先需要添加commons-net和commons-pool2的依赖: ``` <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.7.0</version> </dependency> ``` 然后在application.properties中添加相关配置项: ``` # FTP config ftp.pool.maxTotal=8 ftp.pool.maxIdle=2 ftp.server.host=ftp.example.com ftp.server.port=21 ftp.server.username=user ftp.server.password=pass ftp.server.remote.dir=/path/to/remote/dir ``` 其中,ftp.server.*是远程FTP服务器的配置,ftp.pool.*是连接池的相关配置。通过配置如上的参数,应用程序即可建立FTP连接池,然后在需要使用FTP连接的地方,直接从连接池中获取连接即可,无需手动创建和关闭。 使用FTP连接池可以避免频繁地创建和销毁连接,也能够管理连接的生命周期,提高程序的性能和稳定性。此外,Spring Boot还提供了各种其他类型的连接池,如JDBC连接池、Redis连接池等,方便开发人员进行快速开发和可靠的运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值