如何在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