递归遍历ftp文件目录,并生成目录树

这篇博客详细介绍了如何通过递归方式遍历FTP文件系统,并构建出对应的目录树结构,提供了相应的代码实现和调用方法。
部署运行你感兴趣的模型镜像

首先树结构:

public class TreeVo {
    private String label;
    private List<TreeVo> children;

    public TreeVo() {
    }

    public TreeVo(String label) {
        this.label = label;
        this.children = new ArrayList<>();
    }

    public TreeVo(String label, List<TreeVo> children) {
        this.label = label;
        this.children = children;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public List<TreeVo> getChildren() {
        return children;
    }

    public void setChildren(List<TreeVo> children) {
        this.children = children;
    }

    @Override
    public String toString() {
        return "TreeVo{" +
                "label='" + label + '\'' +
                ", children=" + children +
                '}';
    }
}

然后代码:

/**
 * 递归获取ftp文件目录树
 * @param files
 * @param ftpClient
 * @param pTree
 * @return
 * @throws IOException
 */
public TreeVo recursionTree(FTPFile[] files, FTPClient ftpClient, TreeVo pTree) throws IOException {
    for (FTPFile file : files) {
        if (file.isDirectory()) {
            // new String(file.getName().getBytes("UTF-8"),"iso-8859-1")为了将目录名的编码转成FTPClient需要的编码,否则切换目录会失败。
            boolean flag = ftpClient.changeWorkingDirectory(new String(file.getName().getBytes("UTF-8"),"iso-8859-1"));
            files = ftpClient.listFiles();
            if (files.length > 0) {
                pTree.getChildren().add(recursionTree(files, ftpClient, new TreeVo(file.getName())));
            } else {
                pTree.getChildren().add(new TreeVo(file.getName()));
            }

        } else {
            pTree.getChildren().add(new TreeVo(file.getName()));
        }
    }
    // 子文件夹遍历完成后返回上级目录
    ftpClient.changeToParentDirectory();
    return pTree;
}

调用方法:

public static void main(){

    try {
            FTPClient ftpClient = new FTPClient();
            ftpClient.connect(ip, port);
            ftpClient.login(user, pwd);
            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
                logger.info("未连接到FTP,用户名或密码错误。");
                ftpClient.disconnect();
            } else {
                // 如果ftp连接成功,需要验证路径是否存在
                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                ftpClient.enterLocalPassiveMode();
                ftpClient.setControlEncoding("UTF-8");
                // 获取根目录文件
                FTPFile[] files = ftpClient.listFiles(etlFileSource.getFilePath());
                
                // 创建根节点
                TreeVo root = new TreeVo("root");
                if (files.length > 0) {
                    recursionTree(files, ftpClient, root);
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
           
            logger.info("FTP的IP地址可能错误,请正确配置。");
        } catch (IOException e) {
            e.printStackTrace();
           
            logger.info("FTP的端口错误,请正确配置。");
        } catch (Exception e) {
            e.printStackTrace();
           
            logger.info("查询数据失败。");
        }
}

 

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值