15 votes

Créer une hiérarchie de dossiers par FTP en Java

Existe-t-il une fonctionnalité facilement disponible pour Java permettant de créer une hiérarchie de dossiers sur un serveur FTP distant ? Apache Commons fournit bien un client FTP, mais je ne trouve pas de méthode pour créer une hiérarchie de répertoires. Il permet de créer un seul répertoire (makeDirectory), mais la création d'un chemin d'accès complet ne semble pas y figurer. La raison pour laquelle j'ai besoin de cette méthode est que, parfois, une partie de la hiérarchie des répertoires n'est pas (encore) disponible et, dans ce cas, je veux créer la partie manquante de la hiérarchie, puis passer au répertoire nouvellement créé.

30voto

aaron.spear Points 386

J'avais besoin de la réponse à cette question et j'ai donc implémenté et testé un code pour créer des répertoires selon les besoins. J'espère que cela aidera quelqu'un. Merci ! 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()+"'");
        }
      }
    }
  }     
}

21voto

Tendayi Mawushe Points 10335

Vous devez utiliser une combinaison de FTPClient.changeWorkingDirectory pour savoir si le répertoire existe, puis FTPClient.makeDirectory si l'appel à FTPClient.changeWorkingDirectory renvoie à false .

Vous devez parcourir récursivement l'arborescence du répertoire de la manière décrite ci-dessus à chaque niveau, créer le répertoire selon les besoins.

2voto

Jim Garrison Points 39523

Pourquoi ne pouvez-vous pas utiliser la méthode FTPClient#makeDirectory() pour construire la hiérarchie, un dossier à la fois ?

2voto

jjmontes Points 1965

Apache Commons VFS (Virtual File System) peut accéder à plusieurs systèmes de fichiers différents (dont FTP), et il fournit également une méthode createFolder qui est capable de créer des répertoires parents si nécessaire :

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

La documentation indique que la méthode "crée ce dossier, s'il n'existe pas. Crée également tous les dossiers ancêtres qui n'existent pas. Cette méthode ne fait rien si le dossier existe déjà".

Cela peut répondre à vos besoins.

1voto

Utilisez la fonction ftpSession.mkdir pour créer un répertoire.

@ManagedOperation
private void ftpMakeDirectory(FtpSession ftpSession, String fullDirFilePath) throws IOException {
if (!ftpSession.exists(fullDirFilePath)) {
  String[] allPathDirectories = fullDirFilePath.split("/");
  StringBuilder partialDirPath = new StringBuilder("");
  for (String eachDir : allPathDirectories) {
    partialDirPath.append("/").append(eachDir);

    ftpSession.mkdir(partialDirPath.toString());
  }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X