Java Dropbox Api - 下载 *.app
Java Dropbox Api - Download *.app
我编写了一个名为 DropboxHandler 的 Class。这个 class 管理所有与我的 Dropbox 帐户直接交互的东西。这个class有一些方法,比如上传和下载一个文件,列出一个文件夹中的所有文件等等。一切正常,除了 *.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 的文件夹(启动器是要下载的文件)。但是当它应该下载 Launcher 的内容时,FileOutputStream 会触发一个错误,指出 Launcher.app/Content isn't a Folder.
所以也许任何人都有一些想法,如何下载 *.app "Files"
问候
您发布的代码存在一些问题。您现在遇到的问题是该方法的第一行创建了一个 文件,其名称与您要写入的文件夹同名。
我认为您将遇到的下一个问题是您调用 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());
}
}
我编写了一个名为 DropboxHandler 的 Class。这个 class 管理所有与我的 Dropbox 帐户直接交互的东西。这个class有一些方法,比如上传和下载一个文件,列出一个文件夹中的所有文件等等。一切正常,除了 *.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 的文件夹(启动器是要下载的文件)。但是当它应该下载 Launcher 的内容时,FileOutputStream 会触发一个错误,指出 Launcher.app/Content isn't a Folder.
所以也许任何人都有一些想法,如何下载 *.app "Files"
问候
您发布的代码存在一些问题。您现在遇到的问题是该方法的第一行创建了一个 文件,其名称与您要写入的文件夹同名。
我认为您将遇到的下一个问题是您调用 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());
}
}