概要
最近有小伙伴反馈询问 如何通过实时监听远程FTP文件夹的变化并下载到本地指定目录
针对此疑问,出一期解决方案,我在冲浪时也找到了一些比较好的案例,但是追求完美的我,怎能屈服于别人的博客,对此我研究了两天解决方案,
最终得出结论:FTP协议本身不支持实时监听文件变化。可以通过定时轮询的方式来检查目录下的文件列表
整体实现流程
1.连接到FTP服务器
2. 监听指定目录
3.检测文件变化
4.下载变化的文件
OK废话不多说,上代码ftp的搭建我就不说了
pom依赖
<!-- 用于连接监听FTP文件夹-->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.9.0</version>
</dependency>
<!-- lombok插件-日志输出 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
yml配置文件
#远程ftp相关配置
ftp:
# IP
server: 192.168.1.112
# 端口号
port: 21
# ftp用户名
user: ftpmonitor
# ftp密码
pwd: SolveProblem
# 用户主目录
dir: /home/vsftpd/ftpmonitor
# 下载到本地目录
localDir: /usr/local/tmp/netty/
# 轮询监听时间
sleep: 60000
配置类(便于读取)
import lombok.Getter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 读取yml配置文件中FTP相关配置
*
* @author wusiwee
*/
@Component
@ConfigurationProperties(prefix = "ftp")
public class FtpConfig {
/** ip */
@Getter
private static String server;
/** 端口 */
@Getter
private static Integer port;
/** 用户 */
@Getter
private static String user;
/** 密码 */
@Getter
private static String pwd;
/** 服务器路径 */
@Getter
private static String dir;
@Getter
private static String localDir;
/** 休眠时间 */
@Getter
private static Long sleep;
public void setServer(String server) {
FtpConfig.server = server;
}
public void setPort(Integer port) {
FtpConfig.port = port;
}
public void setUser(String user) {
FtpConfig.user = user