使用FTPClient创建目录失败:

// path="archive\File\upload\2020\06\22" 
isMakeSucess = ftp.makeDirectory(path);

经过查阅资料发现,创建目录方法makeDirectory()不支持创建多级目录,所以需要一级一级地创建目录:

/**
* ftp创建目录——ftpClient只支持一级一级创建
* @param ftp
* @param path
* @return
* @throws IOException
*/
boolean makeDir(FTPClient ftp,String path) throws IOException {
//分割
String[] paths = path.split("\\\\");
//创建成功标识
boolean isMakeSucess=false;
//遍历每一级路径
for (String str : paths) {
if (StringUtils.isBlank(str)) {
continue;
}
//该级路径不存在就创建并切换
if (!ftp.changeWorkingDirectory(str)) {
isMakeSucess = ftp.makeDirectory(str);
boolean changeWorkingDirectory = ftp.changeWorkingDirectory(str);
} else {
//切换路径
boolean changeWorkingDirectory = ftp.changeWorkingDirectory(str);
}
}
return isMakeSucess;
}

接下来使用封装的方法来创建目录,成功创建目录:

boolean makeDictionnary=this.makeDir(ftp,uploadPath);




10/13

评论区提到了已经存在的子目录重复进入的问题,对代码进行修改:

/**
* ftp创建目录——ftpClient只支持一级一级创建
* @param ftp
* @param path
* @return
* @throws IOException
*/
boolean makeDir(FTPClient ftp,String path) throws IOException {
//分割
String[] paths = path.split("\\\\");
//创建成功标识
boolean isMakeSucess=false;
//遍历每一级路径
for (String str : paths) {
if (StringUtils.isBlank(str)) {
continue;
}
//切换目录,根据切换是否成功判断子目录是否存在
boolean changeSuccess = ftp.changeWorkingDirectory(str);
//该级路径不存在就创建并切换
if (!changeSuccess) {
isMakeSucess = ftp.makeDirectory(str);
ftp.changeWorkingDirectory(str);
}
}
return isMakeSucess;
}

由于条件限制,上面的代码未经测试。


水平有限,难免错漏,欢迎指出!


参考:

【1】:​​FtpClient切换、创建目录不成功的问题(makeDirectory、changeWorkingDirectory)​

【2】:​​Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析),兼容Windows和Linux​