递归地列出 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 仅供我使用,其中我只是制作一个仅包含文件夹的列表。
所以,相应地修改。
如何在 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 仅供我使用,其中我只是制作一个仅包含文件夹的列表。 所以,相应地修改。