2016-08-10 34 views
0

Dropboxアカウント内にフォルダ階層とファイルが存在する方法をリストする方法はありますか? 以下の方法は、ルートディレクトリのフォルダのみを示しています。そのような機能の準備が整っているかどうかを知る人は誰でも知っていますか?Dropbox API Listフォルダとフォルダ再帰

ListFolderResult result; 
    try { 
     result = client.files().listFolder(StringUtils.EMPTY); 

     while (true) { 
      for (Metadata metadata : result.getEntries()) { 
       System.out.println(metadata.getPathLower()); 
      } 

      if (!result.getHasMore()) { 
       break; 
      } 
      result = client.files().listFolderContinue(result.getCursor()); 
     } 
    } catch (DbxException exception) { 
     System.out.println(exception.toString()); 
    } 

答えて

0

デフォルトでは、listFolderは再帰的ではありません。

再帰的なリスティングの場合は、ListFolderBuilderを使用し、withRecursiveを使用して再帰をtrueに設定する必要があります。

0

私は次のコードで必要なものを手に入れました。ありがとう!イェレミアスのソリューション@

public void listFolderAndFiles() { 

    try { 
     ListFolderResult result = client.files().listFolderBuilder("").withIncludeDeleted(false).withRecursive(true).withIncludeMediaInfo(true) 
       .start(); 

     // while (true) { 
     List<Metadata> entries = result.getEntries(); 
     int idx = 0; 

     for (Metadata metadata : entries) { 
      if (metadata instanceof FolderMetadata) { 
       System.out.println("" + ++idx + ": FOLDER = " + metadata.getPathDisplay()); 

      } else if (metadata instanceof FileMetadata) { 
       System.out.println("" + ++idx + ": File = " + metadata.getPathDisplay()); 
      } 

      // String filePath = metadata.getPathLower().replace(metadata.getName().toLowerCase(), ""); 
      // System.out.println(metadata.getPathLower()); 
      // System.out.println("FILE PATH" + filePath); 
      // System.out.println("Dropbox" + ((FileMetadata) metadata).getRev()); 
      // System.out.println("Dropbox" + ((FileMetadata) metadata).getClientModified()); 
      // System.out.println("Dropbox" + ((FileMetadata) metadata).getMediaInfo()); 
      // System.out.println("Dropbox" + ((FileMetadata) metadata).getMediaInfo().getMetadataValue()); 
      // System.out.println("Dropbox" + ((FileMetadata) metadata).getSharingInfo()); 
     } 
     // } 

    } catch (DbxException exception) { 
     throw new BusinessException("Não foi possivel obter dados do diretório."); 
    } 

} 
0

は動作しますが、あなたはallso返さListFolderに保留中のより多くの結果があるかどうかを確認したい場合があります。 1つのクエリにつき1万件の上限があります。

while(true){ 

    ListFolderResult result = client.files().listFolderBuilder(path) 
     .withRecursive(true) 
     .start(); 

    List<Metadata> entries = result.getEntries(); 
    for (Metadata metadata : entries) { ... do your logic here } 

    if(result.getHasMore()){ 
     result = client.files().listFolderContinue(result.getCursor); 
    } else { 
     break; //no more entries to process 
    } 


} 

また、try-catchを実行することを忘れないでください。

関連する問題