Create a folder hierarchy through FTP in Java

26,296

Solution 1

You have to use a combination of FTPClient.changeWorkingDirectory to figure out if the directory exists, then FTPClient.makeDirectory if the call to FTPClient.changeWorkingDirectory returns false.

You need to recursively walk the directory tree in the manner described above at each level create the directory as required.

Solution 2

Needed the answer to this and so I implemented and tested some code to create directories as needed. Hope this helps someone. cheers! Aaron

/**
* utility to create an arbitrary directory hierarchy on the remote ftp server 
* @param client
* @param dirTree  the directory tree only delimited with / chars.  No file name!
* @throws Exception
*/
private static void ftpCreateDirectoryTree( FTPClient client, String dirTree ) throws IOException {

  boolean dirExists = true;

  //tokenize the string and attempt to change into each directory level.  If you cannot, then start creating.
  String[] directories = dirTree.split("/");
  for (String dir : directories ) {
    if (!dir.isEmpty() ) {
      if (dirExists) {
        dirExists = client.changeWorkingDirectory(dir);
      }
      if (!dirExists) {
        if (!client.makeDirectory(dir)) {
          throw new IOException("Unable to create remote directory '" + dir + "'.  error='" + client.getReplyString()+"'");
        }
        if (!client.changeWorkingDirectory(dir)) {
          throw new IOException("Unable to change into newly created remote directory '" + dir + "'.  error='" + client.getReplyString()+"'");
        }
      }
    }
  }     
}

Solution 3

Why can't you use the FTPClient#makeDirectory() method to build the hierarchy, one folder at a time?

Solution 4

Apache Commons VFS (Virtual File System) can access several different filesystems (FTP among them), and it also provides a createFolder method that is able to create parent directories if needed:

http://commons.apache.org/vfs/apidocs/org/apache/commons/vfs/FileObject.html#createFolder%28%29

Documentation states that method "creates this folder, if it does not exist. Also creates any ancestor folders which do not exist. This method does nothing if the folder already exists."

This may suit your needs.

Share:
26,296
Admin
Author by

Admin

Updated on February 02, 2020

Comments

  • Admin
    Admin about 4 years

    Is there readily available functionality for Java to create a folder hierarchy on a remote FTP server. Apache Commons does provide an FTP client, but I can't find a method for creating a directory hierarchy. It does allow for creating a single directory (makeDirectory), but creating an entire path does not seem to be in there. The reason I want this is because sometimes part of a directory hierarchy is not (yet) available and in such a case I want to create the missing part of the hierarchy and then change to that newly created directory.