获取FTP服务器某个目录下的所有文件列表
短信预约 -IT技能 免费直播动态提醒
最近的一个需求为扫描FTP文件夹下的所有文件用于前端下载, 要求多层文件夹内的文件也能被扫到.
多层文件夹一般就要用到递归了, 上代码:
private void getAllFiles(FTPClient ftp, String path, List fileList) throws IOException { // 切换路径 ftp.changeWorkingDirectory(path); FTPFile[] ftpFiles = ftp.listFiles(); for (FTPFile ftpFile : ftpFiles) { if (ftpFile.getType() == 0) { // 文件直接添加 fileList.add(ftpFile.getName()); continue; } if (ftpFile.getType() == 1) { // 文件夹修改路径进行递归 String sb = path + "/" + ftpFile.getName(); getAllFiles(ftp, sb, fileList); } } }
调用该方法:
// 从ftp服务器获取文件列表 // 创建FTPClient对象 FTPClient ftp = new FTPClient(); try { int reply; // 连接前设置字符编码 ftp.setCharset(StandardCharsets.UTF_8); ftp.setControlEncoding("UTF-8"); // 连接FTP服务器 // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 ftp.connect(serverIP); // 不需要账号密码时匿名登录 ftp.login("anonymous", null); reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); throw new ApplicationException("connecting to ftp error."); } // 设置文件类型为二进制 (必须, 否则文件无法打开, 血的教训) ftp.setFileType(FTP.BINARY_FILE_TYPE); // 获取文件// String path = "/temp/test"; String path = remotePath; List fileList = new ArrayList<>(); getAllFiles(ftp, path, fileList);
调用完后, fileList中就有指定目录下的所有文件名
依赖:
commons-net commons-net 3.7
定时调用逻辑使用的是PowerJob, 嫌麻烦可以直接使用spring自带的@Scheduled注解.
来源地址:https://blog.csdn.net/aCupOfGelato/article/details/129944960
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341