递归地列出 Android Dropbox API 中的所有文件

List all files, recursively, in Android Dropbox API

如何在 DropBox 文件夹中递归列出所有文件? 我尝试了下面的代码,但 returns 没有结果:

result = dbxClient.files().search("", "*");

路径中的 returns 个文件,而不是子文件夹:

result = dbxClient.files().listFolder(path);

您也可以获得 ListFolderBuilder from listFolderBuilder and use the withRecursive 选项来列出 sub-items。

不过请务必检查 ListFolderResult.hasMore to see if you should call back to listFolderContinue 以获得更多结果。

您可以检查此 link,导航到内部 class '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 仅供我使用,其中我只是制作一个仅包含文件夹的列表。 所以,相应地修改。