FTPClient创建目录失败(makeDirectory)

使用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;
    }

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


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


上一篇:观察者模式(发布、订阅)之(上) 李朝强 李朝强


下一篇:《 FreeSWITCH权威指南》——1.3 我国电话网结构