2017-01-09 3 views
0

私はGoogle Drive Integrationを使用しています。Java Drive Rest V2 APIを使用すると、ドキュメント/ファイルのパス以外のほとんどのドキュメント/ファイルメタデータプロパティを取得できます。Googleドライブからドキュメントとファイルの絶対パスを取得する方法Java Drive Rest V2 APIを使用しますか?

私もStackOverflowの質問に、次の表記:両方のリンク・ソリューションで

私はこの要件を達成するための別の方法を作成する必要があることを示し、それはそこに意味Drive Rest V2 APIがファイルパスを取得するための直接的な方法はありません。

私を案内して、これに関するあなたの提案をお勧めします。

は、ありがとう

Arpit

+0

がGoogle drive.filesのパスのそのような概念は複数の親を持つことはできません –

+0

こんにちは、@ZigMandelお返事ありがとうございます。つまり、「getFilePath(service、file)」のようなカスタムメソッドを作成し、この要件を達成するためにスーパー親[file.getParents()を使用してファイルを反復処理する必要があるということです。 – ArpitBora

答えて

1

私の解決策を共有する他の人に参考になります。ここではサンプルの応答があります)...

は、いくつかのGoogle検索した後とJavaドライブレストV2 APIのGoogleドライブのドキュメントから、完全なファイルパスを呼び出して取得する方法がないことがわかりました。

だから私は私の質問の解決を達成するために、次の2つのカスタムメソッドを作成しました:文字列の戻り値の型と

  1. getFilePath(、ファイルをドライブ)を」。
  2. "getfoldersList(drive、parentReferencesList、folderList)"のListを返します。以下は

public static void main(String[] args) throws IOException { 
    // Build a new authorized API client service. 
    Drive service = getDriveService(); 
    try { 
     // Print the file path and name. 
     FileList result = service.files().list().execute(); 
     List<File> files = result.getItems(); 

     if (files == null || files.size() == 0) { 
      System.out.println("No files found."); 
     } else { 
      System.out.println("Files:"); 

      for (File file : files) { 
       if (!(file.getMimeType().contains("folder"))) { 
        String filePath = null; 

        if (!(file.getParents().isEmpty())) { 
         filePath = getFilePath(service, file); 
        } 

        System.out.println("path: " + filePath); 
        System.out.println("name: " + file.getTitle()); 
        System.out.println(); 
       } 
      } 
      System.out.println("== END =="); 
     } 
    } catch (Exception e) { 
     System.out.println(e); 
    } 
} 

private static String getFilePath(Drive drive, File file) throws IOException { 
    String folderPath = ""; 
    String fullFilePath = null; 

    List<ParentReference> parentReferencesList = file.getParents(); 
    List<String> folderList = new ArrayList<String>(); 

    List<String> finalFolderList = getfoldersList(drive, parentReferencesList, folderList); 
    Collections.reverse(finalFolderList); 

    for (String folder : finalFolderList) { 
     folderPath += "/" + folder; 
    } 

    fullFilePath = folderPath + "/" + file.getTitle(); 

    return fullFilePath; 
} 

private static List<String> getfoldersList(Drive drive, List<ParentReference> parentReferencesList, List<String> folderList) throws IOException { 
    for (int i = 0; i < parentReferencesList.size(); i++) { 
     String id = parentReferencesList.get(i).getId(); 

     File file = drive.files().get(id).execute(); 
     folderList.add(file.getTitle()); 

     if (!(file.getParents().isEmpty())) { 
      List<ParentReference> parentReferenceslist2 = file.getParents(); 
      getfoldersList(drive, parentReferenceslist2, folderList); 
     } 
    } 
    return folderList; 
} 

コードスニペットです -

おかげで、

Arpitボラ

1

Parents.getを使用してみてください。成功した要求は、親とファイル自体の両方へのリンクを返します。ここで

{ 
"kind": "drive#parentReference", 
"id": "0Bw-w9jw2bwglbzlvMVh2cll2dmM", 
"selfLink": "https://www.googleapis.com/drive/v2/files/1-ABCDEzyvp9NFmWz7h6ssgkTKHytO1Nq4SNIboDW8A/parents/0Bw-w9jw2bwglbzlvMVh2cll2dmM", 
"parentLink": "https://www.googleapis.com/drive/v2/files/ABCDEjw2bwglbzlvMVh2cll2dmM", 
"isRoot": false 
} 

ドキュメントからのJava実装です:

private static boolean isFileInFolder(Drive service, String folderId, 
     String fileId) throws IOException { 
    try { 
     service.parents().get(fileId, folderId).execute(); 
    } catch (HttpResponseException e) { 
     if (e.getStatusCode() == 404) { 
     return false; 
     } else { 
     System.out.println("An error occured: " + e); 
     throw e; 
     } 
    } catch (IOException e) { 
     System.out.println("An error occured: " + e); 
     throw e; 
    } 
    return true; 
    } 
+0

あなたの返事のために@nooguiに感謝、あなたの提案は私の要件を達成するためにリードします。私はすぐに私のソリューションを投稿します。 – ArpitBora

関連する問題