2013-08-09 33 views
7

問題は次のとおりです。重複しないでGoogleドライブにフォルダを作成するにはどうすればよいですか?重複しないでGoogleドライブにフォルダを作成するにはどうすればよいですか?

私はこの記事の質問に答えています。解決するために同様の解決策や問題を探している人とこのコードを共有したいと思います。

+7

私たちと知識を共有したい場合は、質問のみを含むように投稿を編集し、残りを回答として投稿することができます。あなたはあなた自身の質問に答えることができ、それは人々が理解するためにこれのように簡単になります:) –

答えて

4

私が持っていた問題は、ドライブに重複したフォルダで終わることなく、Googleドライブにフォルダパスを作成する方法です!

フォルダは、そのタイトルから存在してドライブのインスタンスとフォルダのタイトルを渡し、その親のID(ないタイトル)ここでチェックするために使用される最初の機能:

/** 
    * 
    * @param service google drive instance 
    * @param title the title (name) of the folder (the one you search for) 
    * @param parentId the parent Id of this folder (use root) if the folder is in the main directory of google drive 
    * @return google drive file object 
    * @throws IOException 
    */ 
    private File getExistsFolder(Drive service,String title,String parentId) throws IOException 
    { 
     Drive.Files.List request; 
     request = service.files().list(); 
     String query = "mimeType='application/vnd.google-apps.folder' AND trashed=false AND title='" + title + "' AND '" + parentId + "' in parents"; 
     Logger.info(TAG + ": isFolderExists(): Query= " + query); 
     request = request.setQ(query); 
     FileList files = request.execute(); 
     Logger.info(TAG + ": isFolderExists(): List Size =" + files.getItems().size()); 
     if (files.getItems().size() == 0) //if the size is zero, then the folder doesn't exist 
      return null; 
     else 
      //since google drive allows to have multiple folders with the same title (name) 
      //we select the first file in the list to return 
      return files.getItems().get(0); 
    } 

に使用する関数givienの親の参照内にフォルダを作成します。リストが空の場合、フォルダはGoogleドライブのルートディレクトリに作成されます。

/** 
* 
* @param service google drive instance 
* @param title the folder's title 
* @param listParentReference the list of parents references where you want the folder to be created, 
* if you have more than one parent references, then a folder will be created in each one of them 
* @return google drive file object 
* @throws IOException 
*/ 
private File createFolder(Drive service,String title,List<ParentReference> listParentReference) throws IOException 
{ 
    File body = new File(); 
    body.setTitle(title); 
    body.setParents(listParentReference); 
    body.setMimeType("application/vnd.google-apps.folder"); 
    File file = service.files().insert(body).execute(); 
    return file; 

} 

第3の機能は、Googleドライブに重複しないフォルダのディレクトリパスを作成するために使用されます。 Googleドライブの重複フォルダを防ぐために、フォルダを作成する前にフォルダが存在するかどうかをチェックします。

/** 
* 
* @param service google drive instance 
* @param titles list of folders titles 
* i.e. if your path like this folder1/folder2/folder3 then pass them in this order createFoldersPath(service, folder1, folder2, folder3) 
* @return parent reference of the last added folder in case you want to use it to create a file inside this folder. 
* @throws IOException 
*/ 
private List<ParentReference> createFoldersPath(Drive service,String...titles) throws IOException 
{ 
    List<ParentReference> listParentReference = new ArrayList<ParentReference>(); 
    File file = null; 
    for(int i=0;i<titles.length;i++) 
    { 
     file = getExistsFolder(service, titles[i], (file==null)?"root":file.getId()); 
     if (file == null) 
     { 
      file = createFolder(service, titles[i], listParentReference); 
     } 
     listParentReference.clear(); 
     listParentReference.add(new ParentReference().setId(file.getId())); 
    } 
    return listParentReference; 
} 
+0

どのようなAPIを使用していますか? :)正式なGoogleドライブのAndroid SDK(https://developers.google.com/drive/android/get-started)より使いやすくなっています – qkx

+0

これは時代遅れの回答と考えられています。新しいGoogleドライブAPIにはさまざまな方法がありますファイルを処理するには、悲しいことに古いAPIを使用することはお勧めしません:( –

+0

あなたは素晴らしいです! –

関連する問題