我编写了一个名为DropboxHandler的类。本课程管理与我的 Dropbox 帐户直接交互的所有内容。此类具有一些方法,例如上载和下载文件、列出文件夹中的所有文件等。一切正常,除了 *.app 文件。我知道,这些是文件夹,但我找不到如何下载并保存在我的高清上。这是我下载文件夹/文件的方法
public static void downloadFolder(String fileToDownload, String tempFileName) throws IOException {
FileOutputStream outputStream = new FileOutputStream(tempFileName);
try {
DbxEntry.WithChildren listing = client.getMetadataWithChildren(fileToDownload);
for (DbxEntry child : listing.children) {
if (child instanceof DbxEntry.Folder) {
(new File(tempFileName)).mkdirs();
downloadFolder(fileToDownload + "/" + child.name, tempFileName + "/" + child.name);
} else if (child instanceof DbxEntry.File) {
DbxEntry.File downloadedFile = client.getFile(fileToDownload, null, outputStream);
System.out.println("Metadata: " + downloadedFile.toString());
System.out.println("Downloaded: " + downloadedFile.toString());
}
}
} catch (DbxException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
} finally {
outputStream.close();
System.out.println("Download finished");
}
}
当我运行我的代码时,它会创建一个名为 Launcher.app 的文件夹(启动器是要下载的文件)。但是,当它应该下载启动器的内容时,FileOutputStream 会触发一个错误,指出 Launcher.app/Content 不是文件夹。
所以也许有人有一些想法,如何下载*.app"文件"
问候
您发布的代码存在许多问题。您现在点击的是该方法的第一行创建一个与要写入的文件夹同名的文件。
我认为您将遇到的下一个问题是您称之为getFile
的地方。看起来您正在尝试将每个文件保存到同一个输出流中。因此,从本质上讲,您正在创建一个名为Launcher.app
的文件(而不是文件夹),然后将每个文件的内容写入该文件(可能连接在一起为一个大文件)。
我尝试修复代码,但我根本没有测试过它。(我什至不知道它是否编译。看看这是否有帮助:
// recursively download a folder from Dropbox to the local file system
public static void downloadFolder(String path, String destination) throws IOException {
new File(destination).mkdirs();
try {
for (DbxEntry child : client.getMetadataWithChildren(path).children) {
if (child instanceof DbxEntry.Folder) {
// recurse
downloadFolder(path + "/" + child.name, destination + "/" + child.name);
} else if (child instanceof DbxEntry.File) {
// download an individual file
OutputStream outputStream = new FileOutputStream(
destination + "/" + child.name);
try {
DbxEntry.File downloadedFile = client.getFile(
path + "/" + child.name, null, outputStream);
} finally {
outputStream.close();
}
}
}
} catch (DbxException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}