code: private boolean rename(FTPClient client, Path src, Path dst)
        throws IOException {
      Path workDir = new Path(client.printWorkingDirectory());
      Path absoluteSrc = makeAbsolute(workDir, src);
      Path absoluteDst = makeAbsolute(workDir, dst);
      if (!exists(client, absoluteSrc)) {
        throw new IOException("Source path " + src + " does not exist");
      }
      if (exists(client, absoluteDst)) {
        throw new IOException("Destination path " + dst
            + " already exist, cannot rename!");
      }
      String parentSrc = absoluteSrc.getParent().toUri().toString();
      String parentDst = absoluteDst.getParent().toUri().toString();
      String from = src.getName();
      String to = dst.getName();
      if (!parentSrc.equals(parentDst)) {
        throw new IOException("Cannot rename parent(source): " + parentSrc
            + ", parent(destination):  " + parentDst);
      }
      client.changeWorkingDirectory(parentSrc);
      boolean renamed = client.rename(from, to);
      return renamed;
    }
docs: Convenience method, so that we don't open a new connection when using this
  method from within another method. Otherwise every API invocation incurs
  the overhead of opening/closing a TCP connection.
  
  @param client
  @param src
  @param dst
  @return
  @throws IOException