FtpClient切换、创建目录不成功的问题(makeDirectory、changeWorkingDirectory)

FtpClient切换、创建目录不成功的问题(makeDirectory、changeWorkingDirectory)

做功能时切换目录老是不成功且无法创建文件夹,翻阅一些博客后发现Ftp创建目录只能逐级创建:连接https://blog.csdn.net/Joze_3/article/details/76933888

#做了几个测试:
##1.父路径、子路径皆不存在

public static void main(String[] args) throws Exception {
    ConfigUtil instance = ConfigUtil.getInstance("/config.properties");
    FTPClient ftp = null;
    try {
      ftp = FtpUtil.getFTPClient(instance.getValue("ftp_ip"), instance.getValue("ftp_port"),
        instance.getValue("ftp_user"), instance.getValue("ftp_pwd"));
      ftp.setFileType(FTP.BINARY_FILE_TYPE);
      ftp.enterLocalPassiveMode();
      ftp.setDefaultTimeout(600000);
      ftp.setDataTimeout(600000);
      ftp.setSoTimeout(600000);
      ftp.setControlEncoding("GBK");
     
      String fileUrl = "/test/te/";
     
      if (!ftp.changeWorkingDirectory(fileUrl)) {
        System.err.println("不存在");
        boolean makeDirectory = ftp.makeDirectory(fileUrl);
        boolean changeWorkingDirectory = ftp.changeWorkingDirectory(fileUrl);
        System.err.println("创建:" + makeDirectory + ";切换:" + changeWorkingDirectory);
      } else {
        System.err.println("存在");
      }
     
    }catch (Exception e) {
      e.printStackTrace();
      throw e;
    }finally {
      if(ftp != null) {
        try {
          ftp.logout();
          ftp.disconnect();
        }
        catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

对应ftp文件夹
在这里插入图片描述

结果:
在这里插入图片描述

##2.父路径存在、子路径不存在
还是上面的代码和路径,不重复贴了

对应ftp文件夹
在这里插入图片描述

结果
在这里插入图片描述
在这里插入图片描述

##3.逐级创建
为了好区分换了个路径

public static void main(String[] args) throws Exception {
    ConfigUtil instance = ConfigUtil.getInstance("/config.properties");
    FTPClient ftp = null;
    try {
      ftp = FtpUtil.getFTPClient(instance.getValue("ftp_ip"), instance.getValue("ftp_port"),
        instance.getValue("ftp_user"), instance.getValue("ftp_pwd"));
      ftp.setFileType(FTP.BINARY_FILE_TYPE);
      ftp.enterLocalPassiveMode();
      ftp.setDefaultTimeout(600000);
      ftp.setDataTimeout(600000);
      ftp.setSoTimeout(600000);
      ftp.setControlEncoding("GBK");
     
      String fileUrl = "/tes/t/s";
     
      /*该部分为逐级创建*/
      String[] split = fileUrl.split("/");
     
      for (String str : split) {
        if(StringUtils.isBlank(str)) {
          continue;
        }
        if (!ftp.changeWorkingDirectory(str)) {
          System.err.println("不存在");
          boolean makeDirectory = ftp.makeDirectory(str);
          boolean changeWorkingDirectory = ftp.changeWorkingDirectory(str);
          System.err.println(str + "创建:" + makeDirectory + ";切换:" + changeWorkingDirectory);
        } else {
          System.err.println("存在");
        }
      }
     
    }catch (Exception e) {
      e.printStackTrace();
      throw e;
    }finally {
      if(ftp != null) {
        try {
          ftp.logout();
          ftp.disconnect();
        }
        catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

对应ftp目录
在这里插入图片描述

结果:(ps:这里切分后没有/做为分割符也同样可以创建)
在这里插入图片描述
在这里插入图片描述

##结论:
FtpCilent测试的两个方法只能逐级创建(切换)文件夹
当路径为多层时,父层找不到,无法创建子层文件夹
当路径为多层时,父层可以找到,可以直接创建子层文件夹(多级子层就不行了)

##还有几个点:
1.路径不分大小写(比如例子中的/test/te/如果写成/TEST/te/,若test文件夹存在,用/TEST是可以找到并切换的,但是/TEst这种的就没有试过了)
2.可以省略掉开头的/和结尾的/,逐级创建切换甚至可以不用/,实例里应该体现出来了
3.ConfigUtil和FtpUtil是工具类,改成对应的创建就可以了,没有做其他处理

FTPClient ftpClient = new FTPClient();
ftpClient.connect(ip, port);
ftpClient.login(user, pass);
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值