在Android Dropbox API中以递归方式列出所有文件

时间:2017-02-20 08:55:47

标签: android file dropbox dropbox-api

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

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

这会返回路径中的文件,而不是子文件夹:

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

2 个答案:

答案 0 :(得分:2)

您可以从ListFolderBuilder获取listFolderBuilder并使用withRecursive选项列出子项目。

请务必检查ListFolderResult.hasMore,看看是否应该回拨listFolderContinue以获得更多结果。

答案 1 :(得分:1)

You can check this link, navigate to inner class 'FolderScanTask'. It contains working code for Android: https://github.com/ControlX/Android-Dropbox-UploadImage-To-SpecificFolder-By-FolderSelection/blob/master/app/src/main/java/io/github/controlx/dbxdemo/MainActivity.java

上致电Ajax

这是正在进行的工作,这里我只是为父文件夹创建一个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仅供我使用,其中我只是制作一个只有文件夹的列表。 因此,请相应地进行修改。