300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 递归遍历ftp文件目录 并生成目录树

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

时间:2019-11-28 04:13:00

相关推荐

递归遍历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;}@Overridepublic 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("查询数据失败。");}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。