2012-12-24 29 views
7

Yönetmekte olduğum Google alan adındaki dosyalar kötü bir duruma dönüştü; kök dizinde bulunan binlerce dosya var. Bu dosyaları tanımlamak ve "Drive'ım" altındaki bir klasöre taşımak istiyorum.Google Drive API: Ebeveyn olmayan dosyaları listeleyin

Ebeveynleri bu artık dosyalardan birine listelemek için API'yi kullandığımda, sonuç boş bir dizidir. Bir dosyanın yetim olup olmadığını belirlemek için, alanımdaki tüm dosyalar üzerinde yineleyebilir ve her biri için ebeveynlerin listesini isteyebilirim. Liste boşsa, dosyanın yetim olduğunu biliyorum.

Ancak bu çok yavaştır.

Ebeveynleri olmayan dosyaları aramak için Drive API'yi kullanmak zaten var mı?

q parametresi için "ebeveynler" alanı bunun için yararlı görünmüyor, çünkü yalnızca ebeveyn listesinin bir miktar kimlik içerdiğini belirtmek mümkün.

Güncelleme: Ben belge hiyerarşisinin kökünde gerçekten öğeleri bulmak için hızlı bir yol bulmaya çalışıyorum

. Yani, "Drive'ım" ın çocukları değil, "Drive'ım" ın kardeşleridir. Java'da

+0

Bu bir hataya benziyor, hiçbir ebeveynin olmaması için dosyalara izin vermemeliyiz. –

+2

Sürücü UI dosyaları açıkça bu duruma taşımanıza izin verir, ancak buna karşı önerilerde bulunur. Bu tür dosyaları sorgulamak için harika olurdu. – snae

+0

Hiç bir çözüm buldunuz mu? – casolorz

cevap

3

:

List<File> result = new ArrayList<File>(); 
Files.List request = drive.files().list(); 
request.setQ("'root'" + " in parents"); 

FileList files = null; 
files = request.execute(); 

for (com.google.api.services.drive.model.File element : files.getItems()) { 
    System.out.println(element.getTitle()); 
} 

'kök' dosya veya klasör köküne

+0

Bu, "Benim Drive'ım" klasöründeki dosya ve klasörleri bulur; aslında "root" değil, "Drive'ım" klasörünün özelliği isRoot = true'dur. Doküman hiyerarşisinin asıl kökündeki öğeleri, yani "Sürücüm" ün kardeşlerinde hızlıca bulmanın bir yolunu bulmaya çalışıyorum. Sorumu, bunu yansıtmak için güncelledim. – FishesCycle

+0

@Jasper Kullandığınız kitaplık bağlantısını bana verebilmem için herhangi bir execute() işlevi bulamıyorum() işlevi – Prakhar

+0

İstekleri kullanarak oluşturulabilen 'com.google.api.services.drive.Drive' kullanarak isteği alabilirsiniz. com.google.api.services.drive.Drive.Builder.Builder (HttpTransport, JsonFactory, HttpRequestInitializer). – BrunoJCM

1

Brute olduğunu, ama basit ve eğer çalışırsa üst klasör vardır ..

do { 
     try { 
      FileList files = request.execute(); 

      for (File f : files.getItems()) { 
       if (f.getParents().size() == 0) { 
         System.out.println("Orphan found:\t" + f.getTitle()); 

       orphans.add(f); 
       } 
      } 

      request.setPageToken(files.getNextPageToken()); 
     } catch (IOException e) { 
      System.out.println("An error occurred: " + e); 
      request.setPageToken(null); 
     } 
    } while (request.getPageToken() != null 
      && request.getPageToken().length() > 0); 
0

Sorgunuzda bunu kullanin:

+0

https://gsuite-developers.googleblog.com/2012/08/5-things-you-didnt-know-you-could-do.html –

0

documentation, aşağıdaki sorguyu önerir: is:unorganized owner:me.