第一步:引入jar到pom.xml、

        <!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.6</version>
        </dependency>

第二步:demo代码示例

以下代码实现了,连接ftp,遍历ftp服务器上的目录结构

package com.dx.ftp;

import java.io.IOException;
import java.net.MalformedURLException;

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

/**
 * Hello world!
 */
public class App {
    public static void main(String[] args) throws IOException {
        String hostname = "ftp1.linuxidc.com";
        Integer port = 21;
        String username = "ftp1.linuxidc.com";
        String password = "www.linuxidc.com";
        FTPClient ftpClient = new FTPClient();

        // ftpClient.setControlEncoding("utf-8");
        ftpClient.setControlEncoding("GB2312");

        try {
            System.out.println("connecting...ftp服务器:" + hostname + ":" + port);
            ftpClient.connect(hostname, port); // 连接ftp服务器
            ftpClient.login(username, password); // 登录ftp服务器
            int replyCode = ftpClient.getReplyCode(); // 是否成功登录服务器
            if (!FTPReply.isPositiveCompletion(replyCode)) {
                System.out.println("connect failed...ftp服务器:" + hostname + ":" + port);
            }
            System.out.println("connect successfu...ftp服务器:" + hostname + ":" + port);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        ftpClient.enterLocalPassiveMode();
        ftpClient.changeWorkingDirectory("/");

        deepLoop(ftpClient, "/");

        System.out.println("Hello World!");
    }

    private static void deepLoop(FTPClient ftpClient, String dir) throws IOException {
        FTPFile[] files = ftpClient.listFiles(dir);
        for (FTPFile file : files) {
            if (file.isDirectory()) {
                if (!file.getName().startsWith(".")) {
                    System.out.println("directory     ---------> " + dir + "/" + file.getName());
                    deepLoop(ftpClient, dir + "/" + file.getName());
                }
            } else if (file.isFile()) {
                System.out.println("file         ---------> " + dir + "/" + file.getName());
            } else if (file.isSymbolicLink()) {
                System.out.println("symboliclink---------> " + file.getName());
            } else if (file.isUnknown()) {
                System.out.println("unknown        ---------> " + file.getName());
            }
        }
    }
}

 

基础才是编程人员应该深入研究的问题,比如:
1)List/Set/Map内部组成原理|区别
2)mysql索引存储结构&如何调优/b-tree特点、计算复杂度及影响复杂度的因素。。。
3)JVM运行组成与原理及调优
4)Java类加载器运行原理
5)Java中GC过程原理|使用的回收算法原理
6)Redis中hash一致性实现及与hash其他区别
7)Java多线程、线程池开发、管理Lock与Synchroined区别
8)Spring IOC/AOP 原理;加载过程的。。。
+加关注】。