java ftp 目录_JavaFTP递归查询指定目录下的所有目录和文件

package com.projects.se1080.qrcode_auth.controller;

import io.swagger.annotations.ApiOperation;

import lombok.Data;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPFile;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

/**

* @author:Yjx

* @description:

* @date:2019/6/28 19:46

*/

@RestController

@RequestMapping("/ftp")

public class RecursionFtp {

@Resource

private FtpConfig ftpConfig;

@ApiOperation("递归列出FTP目录下的内容(包括文件和目录)")

@PostMapping("/recursionDir")

public MyTree recursionDir(@RequestBody ListDirDTO dto) throws Exception {

FTPClient ftp = this.initFtpClient();

if (ftp.getReplyCode() > 0) {

String directory = dto.getDirectory();

ftp.changeWorkingDirectory(directory);

FTPFile[] ftpFiles = ftp.listFiles();

MyTree root = new MyTree(directory);

if (ftpFiles.length > 0) {

this.recursion(ftpFiles, ftp, root);

}

this.destroyFtpClient(ftp);

return root;

} else {

return null;

}

}

private MyTree recursion(FTPFile[] fileArr, FTPClient ftp, MyTree myTree) throws Exception {

if (fileArr.length > 0) {

for (FTPFile it : fileArr) {

if (it.isDirectory()) {

ftp.changeWorkingDirectory(new String(it.getName().getBytes("utf-8"), "iso-8859-1"));

FTPFile[] ftpFiles = ftp.listFiles();

if (ftpFiles.length > 0) {

myTree.getChildren().add(this.recursion(ftpFiles, ftp, new MyTree(it.getName())));

} else {

myTree.getChildren().add(new MyTree(it.getName()));

ftp.changeToParentDirectory(); // 空目录务必要返回上一级

}

} else {

myTree.getChildren().add(new MyTree(it.getName()));

}

}

}

ftp.changeToParentDirectory();

return myTree;

}

/**

* 初始化ftpClient

*

* @return

* @throws IOException

*/

private FTPClient initFtpClient() throws IOException {

FTPClient ftp = new FTPClient();

ftp.connect(this.ftpConfig.getIp(), this.ftpConfig.getPort());

ftp.login(this.ftpConfig.getUsername(), this.ftpConfig.getPassword());

ftp.setBufferSize(this.ftpConfig.getBufferSize());

ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

ftp.changeWorkingDirectory(this.ftpConfig.getBaseDir()); //对于某些ftp认证模式,需要配置用户的ftp根目录

return ftp;

}

/**

* 销毁ftpClient

*

* @param ftpClient

* @throws IOException

*/

private void destroyFtpClient(FTPClient ftpClient) throws IOException {

ftpClient.logout();

ftpClient.disconnect();

}

}

/**

* ftp服务器相关配置

*/

@Data

@Configuration

@ConfigurationProperties(prefix = "ftp")

class FtpConfig {

private String ip = "192.168.1.10";

private int port = 21;

private String username = "myFtp";

private String password = "xxxxxx";

private String baseDir = "/";

private int bufferSize = 1024 * 1024 * 4;

}

@Data

class MyTree {

private String name;

private List children;

public MyTree() {

}

public MyTree(String name) {

this.name = name;

this.children = new ArrayList<>();

}

public MyTree(String name, List children) {

this.name = name;

this.children = children;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值