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());
    }
}