Создание иерархии папок через FTP в Java
Есть ли доступная функциональность для Java для создания иерархии папок на удаленном FTP-сервере. Apache Commons предоставляет FTP-клиент, но я не могу найти метод для создания иерархии каталогов.
Это позволяет создавать единый каталог (makeDirectory), но создание целого пути, похоже, не существует.
Причина, по которой я хочу это, заключается в том, что иногда часть иерархии каталогов пока недоступна, и в таком случае я хочу создать недостающую часть иерархии, а затем перейти к этому вновь созданному каталогу.
Ответы
Ответ 1
Вам нужно использовать комбинацию FTPClient.changeWorkingDirectory
, чтобы выяснить, существует ли каталог, а затем FTPClient.makeDirectory
, если вызов FTPClient.changeWorkingDirectory
возвращает false
.
Вам нужно рекурсивно пройти дерево каталогов описанным выше способом на каждом уровне, создав каталог по мере необходимости.
Ответ 2
Нужно ответить на этот вопрос, поэтому я внедрил и протестировал некоторый код для создания каталогов по мере необходимости. Надеюсь, это поможет кому-то. ура! Аарон
/**
* 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()+"'");
}
}
}
}
}
Ответ 3
Apache Commons VFS (Virtual File System) может обращаться к нескольким различным файловым системам (среди них FTP), а также предоставляет метод createFolder, который может при необходимости создавать родительские каталоги:
http://commons.apache.org/vfs/apidocs/org/apache/commons/vfs/FileObject.html#createFolder%28%29
В документации указано, что метод "создает эту папку, если она не существует, а также создает любые папки-предки, которые не существуют. Этот метод ничего не делает, если папка уже существует".
Это может удовлетворить ваши потребности.
Ответ 4
Почему вы не можете использовать метод FTPClient # makeDirectory() для создания иерархии, по одной папке за раз?
Ответ 5
Используйте функцию ftpSession.mkdir для создания каталога.
@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());
}
}