Java是否具備在遠程FTP服務器上創建文件夾層次結構的現成功能。 Apache Commons提供了一個FTP客戶端,但我找不到創建目錄層次結構的方法。 它確實允許創建單個目錄(makeDirectory),但創建整個路徑似乎並不在其中。 我想要這樣做的原因是因爲有時目錄層次結構的一部分尚不可用,在這種情況下,我想創建層次結構的缺失部分,然後切換到新創建的目錄。通過Java中的FTP創建文件夾層次結構
回答
你必須使用的FTPClient.changeWorkingDirectory
組合弄清楚,如果該目錄存在,然後FTPClient.makeDirectory
如果調用FTPClient.changeWorkingDirectory
回報false
。
您需要按照上述方式在每個級別遞歸地遍歷目錄樹,根據需要創建目錄。
爲什麼不能使用FTPClient#makeDirectory()方法一次構建層次結構,一個文件夾?
阿帕奇百科全書VFS(虛擬文件系統)可以(其中包括FTP)訪問多個不同的文件系統,並且還提供了createFolder方法,如果需要的話,它能夠創建父目錄:
http://commons.apache.org/vfs/apidocs/org/apache/commons/vfs/FileObject.html#createFolder%28%29
文檔如果方法「創建該文件夾(如果該文件夾不存在),則創建任何不存在的祖先文件夾,如果該文件夾已經存在,則此方法不執行任何操作。
這可能適合您的需求。
是的,我讀到了。不幸的是我不能使用這個庫,因爲它在目標系統上不可用。 – Pieter 2010-11-03 12:34:56
需要這個答案,所以我實現並測試了一些代碼來根據需要創建目錄。希望這可以幫助某人。乾杯! 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()+"'");
}
}
}
}
}
使用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());
}
}
- 1. 文件夾層次結構java web
- 2. build.gradle中創建文件夾層次結構的任務
- 3. 在zip中創建文件夾層次結構 - 使用gradle
- 4. 遍歷文件夾層次結構
- 5. 如何在Vim中通過FTP創建文件和文件夾?
- 6. 在Excel中通過MDX創建層次結構
- 7. 創建文件夾結構
- 8. Java - 通過FTP上傳文件夾?
- 9. 顯示文件夾層次結構中的文件
- 10. 在vb.net中創建文件的層次結構
- 11. 如何在delphi中通過文件名列表構建層次結構,virtualstringtree
- 12. 通過FTP創建的文件不能通過FTP刪除
- 13. 在LINQ中創建層次結構
- 14. 在SQL Server中創建層次結構
- 15. FTP:創建文件夾(Android)
- 16. 創建文件夾/文件結構
- 17. 預定義文檔文件夾中的文件夾層次結構
- 18. 試圖在eclipse中爲Java創建單個文件,但兩個在不同的文件層次結構創建
- 19. Java樹的層次結構
- 20. LogiXML通過Excel文件的層次結構
- 21. 如何檢索文件夾層次結構中最後更新的文件夾?
- 22. c#構建層次結構
- 23. 獲取文件夾結構層次結構的最佳數據結構?
- 24. NUnit測試用例生成:如何創建子文件夾(層次結構)?
- 25. Java通用接口層次結構
- 26. Windows中的文件夾層次結構和用戶權限
- 27. 文件夾層次結構中的多個位置從
- 28. 傳統文件夾層次結構中的TypeScript類
- 29. Android瀏覽器中書籤的文件夾層次結構
- 30. 無法通過FTP或cPanel創建文件夾後git克隆
事實上這就是我想通。基本上這是創建你自己的版本的mkdirs,但對於FTP。 – Pieter 2010-11-03 12:33:51