如何在DropBox文件夾中列出所有文件,遞歸地? 我嘗試下面的代碼,但不返回結果:在Android Dropbox API中遞歸列出所有文件
result = dbxClient.files().search("", "*");
而這個返回路徑的文件,而不是子文件夾:
result = dbxClient.files().listFolder(path);
如何在DropBox文件夾中列出所有文件,遞歸地? 我嘗試下面的代碼,但不返回結果:在Android Dropbox API中遞歸列出所有文件
result = dbxClient.files().search("", "*");
而這個返回路徑的文件,而不是子文件夾:
result = dbxClient.files().listFolder(path);
你可以從listFolderBuilder
一個ListFolderBuilder
和使用withRecursive
選項列出子 - 項目也是如此。
請務必檢查ListFolderResult.hasMore
,看看您是否應該打回listFolderContinue
以獲得更多結果。
您可以選中此鏈接,導航到內部類'FolderScanTask'。它包含Android的工作代碼: https://github.com/ControlX/Android-Dropbox-UploadImage-To-SpecificFolder-By-FolderSelection/blob/master/app/src/main/java/io/github/controlx/dbxdemo/MainActivity.java
這是工作正在進行中,在這裏我只是爲父文件夾做一個ArrayList,有更多的邏輯建議由Greg已經在那裏,你只需要填寫它。
代碼片段是相同的:
String path = "";
DbxClientV2 dbxClient = DropboxClient.getClient(ACCESS_TOKEN);
TreeMap<String, Metadata> children = new TreeMap<String, Metadata>();
try {
try {
result = dbxClient.files()
.listFolder(path);
} catch (ListFolderErrorException ex) {
ex.printStackTrace();
}
List<Metadata> list = result.getEntries();
cs = new CharSequence[list.size()];
arrayList = new ArrayList<>();
arrayList.add("/");
while (true) {
int i = 0;
for (Metadata md : result.getEntries()) {
if (md instanceof DeletedMetadata) {
children.remove(md.getPathLower());
} else {
String fileOrFolder = md.getPathLower();
children.put(fileOrFolder, md);
if(!fileOrFolder.contains("."))
arrayList.add(fileOrFolder);
}
i++;
}
if (!result.getHasMore()) break;
try {
result = dbxClient.files()
.listFolderContinue(result.getCursor());
} catch (ListFolderContinueErrorException ex) {
ex.printStackTrace();
}
}
} catch (DbxException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
這裏的ArrayList只是爲我所用,其中我只是做只有一個文件夾列表。 因此,相應地修改。
注意,['search'](https://dropbox.github.io/dropbox-sdk-java/api-docs/v2.1.x/com/dropbox/core/v2/files/DbxUserFilesRequests。 html#search-java.lang.String-java.lang.String-)不支持這樣的「*」通配符。不管怎樣,你應該使用列表文件夾功能。 – Greg