2010-11-02 148 views
13

Java是否具備在遠程FTP服務器上創建文件夾層次結構的現成功能。 Apache Commons提供了一個FTP客戶端,但我找不到創建目錄層次結構的方法。 它確實允許創建單個目錄(makeDirectory),但創建整個路徑似乎並不在其中。 我想要這樣做的原因是因爲有時目錄層次結構的一部分尚不可用,在這種情況下,我想創建層次結構的缺失部分,然後切換到新創建的目錄。通過Java中的FTP創建文件夾層次結構

回答

1

爲什麼不能使用FTPClient#makeDirectory()方法一次構建層次結構,一個文件夾?

2

阿帕奇百科全書VFS(虛擬文件系統)可以(其中包括FTP)訪問多個不同的文件系統,並且還提供了createFolder方法,如果需要的話,它能夠創建父目錄:

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

文檔如果方法「創建該文件夾(如果該文件夾不存在),則創建任何不存在的祖先文件夾,如果該文件夾已經存在,則此方法不執行任何操作。

這可能適合您的需求。

+0

是的,我讀到了。不幸的是我不能使用這個庫,因爲它在目標系統上不可用。 – Pieter 2010-11-03 12:34:56

25

需要這個答案,所以我實現並測試了一些代碼來根據需要創建目錄。希望這可以幫助某人。乾杯! 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()+"'"); 
     } 
     } 
    } 
    }  
} 
+1

你節省了我的時間..謝謝Aaron! – Mohsin 2013-02-15 19:47:11

+0

該方法是否應該不反轉層次結構?如果多次調用此方法,它必須始終遍歷整個樹。 – djmj 2014-07-05 01:10:36

+0

謝謝,這正是我來這麼做的原因!節省時間! – Davor 2015-05-12 11:41:22

0

使用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()); 
    } 

}

相關問題