2013-08-09 7 views
7

la domanda è: come creare cartelle in google drive senza duplicare?Come creare cartelle nell'unità google senza duplicare?

Sto rispondendo alla domanda in questo post e voglio condividere questo codice con chiunque stia cercando una soluzione o un problema simile da risolvere.

+7

Se desideri condividere le tue conoscenze con noi, puoi modificare il tuo post in modo che contenga solo la domanda e quindi postare il resto come risposta. Puoi rispondere alla tua domanda e rende più facile per gli utenti post come questo :) –

risposta

4

il problema che ho avuto, è come creare il percorso delle cartelle in google drive senza finire con le cartelle duplicati nella dirve!

la prima funzione utilizzata per controllare dove la cartella è esiste dal suo titolo, passare l'istanza di unità e del titolo della cartella ed è genitori Id (non il titolo):

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

la funzione utilizzata per crea una cartella all'interno dei riferimenti dei genitori di givien, se la lista è vuota, allora la cartella verrà creata nella directory principale del google drive.

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

} 

la terza funzione utilizzata per creare un percorso di directory delle cartelle senza duplicati in Google Drive. al fine di evitare cartelle duplicate in google drive, la funzione controllerà se la cartella esiste o meno prima di crearla.

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

che tipo di API stai usando? :) sembra molto più facile da usare rispetto all'SDK ufficiale di Google Drive Android (https://developers.google.com/drive/android/get-started) – qkx

+0

Questa è ora considerata una risposta obsoleta, la nuova API di Google Drive ha un modo diverso per gestire i file, purtroppo non è consigliabile utilizzare la vecchia API :( –

+0

sei fantastico! –

Problemi correlati