根目录

FTPClient的根目录为"/"

切换到根目录

ftpClient.changeWorkingDirectory("/"); // 切换到根目录
String dir = ftpClient.printWorkingDirectory(); // 获取当前工作目录
System.out.println(dir); // 打印输出当前工作目录,输出结果为"/"

绝对路径

绝对路径是以/开头的,比如"/AA","/AA/BB","/AA/BB/CC/","/AA/BB/CC/test.txt"等

使用绝对路径的话不受当前工作路径的影响,

比如如下实例代码使用changeWorkingDirectory("/A1/B1")方法切换当前工作路径到/A1/B1文件夹下

但是我们使用ftpClient.listNames("/A1/B2")绝对路径获取/A1/B2文件夹下的文件,并不受当前工作目录的影响

记得绝对路径一定是以/开头的不要写成"A1/B2",这样的话就变成相对路径了,就会受当前路径的影响,相对路径"A1/B2"转化成绝对路径其实就是当前工作目录+相对路径,也就是"/A1/B1/A1/B2"

对于相对路径我们下面部分会再详细说明

public static void main(String[] args) {
    try {
        FTPClient ftpClient = new FTPClient();
        ftpClient.connect(ftpIp, ftpPort);
        ftpClient.login(ftpName, ftpPws);
        ftpClient.enterLocalPassiveMode();

        ftpClient.changeWorkingDirectory("/A1/B1");
        System.out.println("当前工作目录:" + ftpClient.printWorkingDirectory());

        String[] names = ftpClient.listNames("/A1/B2");
        System.out.println("/A1/B2目录下的文件:" + Arrays.toString(names));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

输出结果

当前工作目录:/A1/B1
/A1/B2目录下的文件:[/A1/B2/b21.txt, /A1/B2/b22.txt]

相对路径

相对路径开头没有/

相对路径的绝对路径为当前路径+相对路径

如下实例先把当前工作目录切换到A1,然后再通过changeWorkingDirectory("B1")切换到B1,由于所以传入的是相对路径,所以实际切换后的路径是当前工作路径+B1,也就是/A1/B1

最后再通过changeWorkingDirectory("/A1"),切换回A1目录,注意这时候传的是绝对路径所以不受当前工作目录影响,所以切换后的工作路径是"/A1",而不是"/A1/B1/A1"

public static void main(String[] args) {
    try {
        FTPClient ftpClient = new FTPClient();
        ftpClient.connect(ftpIp, ftpPort);
        ftpClient.login(ftpName, ftpPws);
        ftpClient.enterLocalPassiveMode();
        
        ftpClient.changeWorkingDirectory("/A1");
        System.out.println("当前工作目录:" + ftpClient.printWorkingDirectory());

        ftpClient.changeWorkingDirectory("B1");
        System.out.println("当前工作目录:" + ftpClient.printWorkingDirectory());

        ftpClient.changeWorkingDirectory("/A1");
        System.out.println("当前工作目录:" + ftpClient.printWorkingDirectory());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

输出结果为

当前工作目录:/A1
当前工作目录:/A1/B1
当前工作目录:/A1

适用的方法

基本上FTPClient中所有关于文件或文件夹操作的方法都适用绝对路径和相对路径,有多个参数的方法还可以两种方式同时使用,比如rename("B1/test.txt", "/A1/test.txt"),下面列出比较常见的方法

  • changeWorkingDirectory
  • listNames
  • retrieveFile
  • retrieveFileStream
  • storeFile
  • storeFileStream
  • makeDirectory
  • rename

总结

绝对路径以"/"开头

相对路径不以"/"开头

相对路径转成绝对路径=当前工作目录 + "/" + 绝对路径

建议能使用绝对路径就尽量不要使用相对路径,因为相对路径你能够一目了然地知道你当前在操作的文件路径,而如果使用相对路径的话很容易出现错误,因为FTP操作中经常会使用changeWorkingDirectory切换工作目录,切来切去的话到最后你都不知道当前工作目录是哪个,笔者就曾经在这里踩过坑,误删文件差点被抓去祭天