提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
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();
}
}