根目录
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切换工作目录,切来切去的话到最后你都不知道当前工作目录是哪个,笔者就曾经在这里踩过坑,误删文件差点被抓去祭天