2015-01-29 2 views
0

Я закодировал класс под названием DropboxHandler. Этот класс управляет всем, что напрямую взаимодействует с моей учетной записью Dropbox. У этого класса есть некоторые методы, такие как загрузка и загрузка файла, перечисление всех файлов в папке и т. Д. Все работает отлично, за исключением файлов * .app. Я знаю, что это папки, но я не могу узнать, как их загрузить и сохранить на моем HD. Вот мой метод для загрузки файла/папкиJava Dropbox Api - Загрузить * .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 является файл для загрузки). Но когда он должен загружать содержимое Launcher, FileOutputStream вызывает ошибку, в которой говорится, что Launcher.app/Content не является Папкой.

Так, может быть, у кого есть какие-то идеи, как загрузить * .app «Files»

приветствий

+0

Я не думаю, что вы действительно сказали, в чем проблема. Вы вставили код, но не объяснили, что происходит. Вы получаете сообщение об ошибке? Какова трассировка стека? Или приложение делает что-то другое, чем вы ожидаете? Если да, то что вы ожидали и какое наблюдаемое поведение? – smarx

+0

Извините, я забыл упомянуть ^^ –

ответ

0

Есть целый ряд вопросов, с кодом вас в курсе. Тот, который вы сейчас нажимаете, состоит в том, что первая строка метода создает файл с тем же именем, что и папка, в которую вы хотите записать.

Я думаю, что следующая проблема, в которую вы попадете, - это то, где вы звоните 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()); 
    } 
} 
+0

Ahhh, я вижу свою проблему. Выходной поток был все еще открытым при вызове метода рекурсивно. Ну, ваша версия работает, но теперь, после того, как все было загружено, я попытался запустить приложение, но он говорит, что приложение не может быть запущено. Что теперь не так? –

+0

Все, что я могу сделать, это догадаться, так как у меня нет доступа к папке, но, возможно, к файловым разрешениям? (Возможно, правильные файлы не отмечены как исполняемые файлы?) – smarx

Смежные вопросы