2013-08-09 22 views
7

pytanie brzmi: Jak tworzyć foldery na dysku Google bez duplikowania?Jak tworzyć foldery na dysku Google bez duplikowania?

Odpowiadam na to pytanie w tym poście i chcę udostępnić ten kod każdemu, kto szuka podobnego rozwiązania lub problemu do rozwiązania.

+7

Jeśli chcesz podzielić się z nami swoją wiedzą, możesz edytować swój wpis, aby zawierał tylko pytanie, a następnie publikować resztę jako odpowiedź. Możesz odpowiedzieć na własne pytanie i ułatwia to zrozumienie postów :) –

Odpowiedz

4

Problem, który miałem, to jak utworzyć ścieżkę folderów na dysku Google, nie kończąc się na duplikatach folderów w katalogu dirve!

pierwsza funkcja służy do sprawdzania, gdzie folder jest występować z jej tytułu, przechodzą instancji napędowy i tytuł folderu i to rodzicom ID (nie tytuł):

/** 
    * 
    * @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); 
    } 

funkcja używana do utwórz folder wewnątrz referencji rodziców givien, jeśli lista jest pusta, folder zostanie utworzony w katalogu głównym dysku 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; 

} 

trzecia funkcja służy do tworzenia ścieżki katalogów folderów bez duplikatów w napędzie google. , aby zapobiec duplikowaniu folderów na dysku google, funkcja sprawdzi, czy folder istnieje, czy nie, przed jego utworzeniem.

/** 
* 
* @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

jakiego rodzaju api używasz? :) wygląda dużo łatwiej niż oryginalny oficjalny pakiet SDK Androida Google Drive (https://developers.google.com/drive/android/get-started) – qkx

+0

Jest to teraz przestarzała odpowiedź, nowy interfejs Google Drive Drive działa inaczej radzić sobie z plikami, niestety nie zaleca się używania starego API :( –

+0

jesteś niesamowity! –

Powiązane problemy