2012-12-24 84 views
7

我管理的Google域中的文件已進入錯誤狀態;有數千個文件駐留在根目錄中。我想識別這些文件並將它們移到「我的雲端硬盤」下面的文件夾中。Google Drive API:列出沒有父級的文件

當我使用API​​來列出父母爲這些孤立的文件之一,結果是空數組。爲了確定一個文件是否是孤立的,我可以迭代我的域中的所有文件,併爲每個文件請求父項列表。如果列表爲空,我知道文件是孤立的。

但這是非常緩慢。

反正是有使用的驅動器API來搜索沒有父母的文件?

的Q參數的「父母」現場似乎並沒有對這個很有用,因爲它是唯一可以指定家長列表包含一些ID。

更新:

我試圖找到一種快速的方法來找到那些真正在文檔層次結構的根項目。也就是說,他們是「我的驅動器」的兄弟姐妹,而不是「我的驅動器」的孩子。

+0

這聽起來像一個錯誤,我們不應該讓文件沒有任何父母。 –

+2

驅動器UI明確允許您將文件移到這種情況,但建議不要這樣做。能夠查詢這些文件會很棒。 – snae

+0

你有沒有找到解決方案? – casolorz

回答

3

在Java:

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()); 
} 

'根' 是父文件夾,如果該文件或文件夾在根

+0

這會在「我的雲端硬盤」中找到文件和文件夾,但實際上並不是根目錄,但令人困惑的是,「我的雲端硬盤」文件夾的屬性爲isRoot = true。我試圖找到一種方法來快速查找文檔層次結構的實際根目錄中的項目,即「我的驅動器」的兄弟。我已更新我的問題以反映這一點。 – FishesCycle

+0

@Jasper你能給我的鏈接庫,您使用的,因爲我無法找到任何的execute()函數 – Prakhar

+0

您可以獲取使用'com.google.api.services.drive.Drive'的要求,可使用創建'com.google.api.services.drive.Drive.Builder.Builder(HttpTransport,JsonFactory,HttpRequestInitializer)'。 – BrunoJCM

1

蠻力,但簡單,它的工作原理..

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

嘗試在您的查詢中使用此項:

'root' in parents 
+0

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

相關問題