2016-04-30 9 views
0

Ich muss die Ordner, Unterordner und Dateien von einem Google Drive lesen und die entsprechende Hierarchie (von Ordnern, Unterordnern und Dateien) in meinem Dateisystem erstellen, mit leeren Dateien (ich will nur um die Namen zu behalten, nicht die Daten der Dateien). So ähnlich, wenn ich alles runterladen würde, aber nur mit leeren Dateien und ohne die ganzen Dateien herunterladen zu müssen.Dateihierarchie von Google Drive in Java extrahieren

Mein Ziel ist es, die komplette Hierarchie lokal zu haben, um mit anderen Programmen, die das Dateisystem (Ordner, Unterordner und Dateien) als Eingabe verwenden, daran zu arbeiten.

Mein Problem ist, dass Google Drive API scheint auf IDs (Labels) basiert und scheint keine Hierarchie/Pfad zu haben. Ich habe entweder alle Dateien auflisten und diejenigen finden, die Eltern haben, und die gesamte Hierarchie selbst erstellen (scheint keine wunderbare Idee), oder starten Sie mit den Stammdateien und verwenden Sie com.google.api.services.drive.Drive.Children, um rekursiv meine Ordner und Dateien aus den Dateien zu erstellen habe die Wurzel als Elternteil (ich hatte Probleme damit, da ich die Abhängigkeit von Maven nicht finden kann).

Hätten Sie eine bessere Idee oder wissen Sie, ob dafür bereits eine Lösung existiert? Ich kann anscheinend nichts in der Google Drive-Dokumentation finden, die damit in Zusammenhang steht (und die Beispiele haben fast nie die richtigen Maven-Abhängigkeiten).

Danke trotzdem für Ihre Zeit.

Beispiel: Auf Google Drive

file1.parent is folder1 
file2.parent is root 
folder1.parent is root 

Sollte wie diese auf dem lokalen Dateisystem erscheinen (es in einem temporären Ordner sein könnte).

root/ 
    folder1/ 
     file1 
    file2 

Antwort

2

Schnellstartanleitung für Java - https://developers.google.com/drive/v3/web/quickstart/java.

Sie verwenden Gradle.Wenn Sie Maven bevorzugen Sie die folgenden Abhängigkeiten:

<dependencies> 
    <dependency> 
     <groupId>com.google.apis</groupId> 
     <artifactId>google-api-services-drive</artifactId> 
     <version>v3-rev22-1.21.0</version> 
    </dependency> 

    <dependency> 
     <groupId>com.google.oauth-client</groupId> 
     <artifactId>google-oauth-client</artifactId> 
     <version>1.21.0</version> 
    </dependency> 

    <dependency> 
     <groupId>com.google.oauth-client</groupId> 
     <artifactId>google-oauth-client-jetty</artifactId> 
     <version>1.21.0</version> 
    </dependency> 

</dependencies> 

Dies wird Ihnen das Arbeitsbeispiel (dauerte 10 Minuten zu laufen). Kommen wir nun zum Hierarchie-Problem. Sie müssen die Methode files.list verwenden und die Suchabfrage angeben. Liste der unterstützten Abfrageparameter ist hier - https://developers.google.com/drive/v3/web/search-parameters.

Also, starten Sie von der Wurzel wie folgt aus:

FileList result = service.files().list() 
      .setQ("'root' in parents and trashed = false") 
      .setPageSize(100) 
      .setFields("nextPageToken, files(id, name, mimeType)") 
      .execute(); 

Dann rekursiv die Hierarchie aufbauen, indem Sie den Ordner-IDs anstelle von ‚root‘ in der Abfrage verwenden. Sie können feststellen, ob die angegebene Dateiressource ein Ordner oder eine Datei ist, indem Sie deren MimeType-Eigenschaft betrachten. Der MIME-Typ für einen Ordner lautet application/vnd.google-apps.folder.

1

Aufrufe von Drive nicht rekursiv aufrufen.

Der beste Weg, um zu erreichen, was Sie wollen, ist, alle Ordner mit files.list q=mimetype=application/vnd.google-apps.folder abzurufen und dann die übergeordneten Informationen für jeden Ordner zu verwenden, um eine In-Memory-Hierarchie zu erstellen.

Bedenken Sie, dass Google Drive keine Hierarchie erzwingt, daher kann eine Datei mehrere Eltern haben und ein Großelternteil kann auch ein Kind sein.

zB

folderA_ 
folderB_\ 
     \__folderC 
        \__folderB 

... legal

0

Sie müssen möglicherweise mit dem verfügbaren Bereichen wie anfordernden Vollaussteuerung Umfang berücksichtigen, da Sie die Notwendigkeit, im Zusammenhang mit der Notierung oder Dateien in Benutzer-Laufwerk neu zu organisieren, wie diskutiert in Choose Auth Scopes

Anfrage Format:

(https://www.googleapis.com/auth/drive) 

Auf der anderen Seite können Sie auch eine Liste Ihrer Dateien abrufen, indem Sie eine HTTP-Anfrage mit allen anwendbaren Parametern in Files: list senden.