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éé.
Réponses
Trop de publicités?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()+"'");
}
}
}
}
}
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.
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.
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());
}
}