在Java中从Google Drive提取文件层次结构

在Java中从Google Drive提取文件层次结构,java,google-drive-api,filesystems,hierarchy,Java,Google Drive Api,Filesystems,Hierarchy,我需要从谷歌硬盘读取文件夹、子文件夹和文件,并在我的文件系统中创建相应的层次结构(文件夹、子文件夹和文件),其中包含空文件(我只想保留文件名,不想保留文件数据)。就像我下载了所有的东西,但是只有空文件,而不必下载整个文件 我的目标是在本地建立完整的层次结构,以便与使用文件系统(文件夹、子文件夹和文件)作为输入的其他程序一起使用 我的问题是googledriveapi似乎基于id(标签),并且似乎没有层次结构/路径。我想要么列出所有文件并找到那些有父文件的文件,然后自己创建整个层次结构(这似乎不是

我需要从谷歌硬盘读取文件夹、子文件夹和文件,并在我的文件系统中创建相应的层次结构(文件夹、子文件夹和文件),其中包含空文件(我只想保留文件名,不想保留文件数据)。就像我下载了所有的东西,但是只有空文件,而不必下载整个文件

我的目标是在本地建立完整的层次结构,以便与使用文件系统(文件夹、子文件夹和文件)作为输入的其他程序一起使用

我的问题是googledriveapi似乎基于id(标签),并且似乎没有层次结构/路径。我想要么列出所有文件并找到那些有父文件的文件,然后自己创建整个层次结构(这似乎不是一个好主意),要么从根文件开始,使用
com.google.api.services.drive.drive.Children
从根文件作为父文件递归创建文件夹和文件(我对这个有问题,因为我似乎找不到它的maven依赖项)

你会有更好的想法吗?或者你知道是否已经有了解决方案吗?我在Google Drive文档中似乎找不到与此相关的任何内容(而且示例几乎从来没有正确的Maven依赖项)

无论如何,谢谢你抽出时间

例如: 在谷歌硬盘上

file1.parent is folder1
file2.parent is root
folder1.parent is root
在本地文件系统上应该是这样显示的(可能在临时文件夹中)


不要递归调用驱动器

实现所需功能的最佳方法是使用
files.list q=mimetype=application/vnd.google apps.folder
获取所有文件夹,然后使用每个文件夹的父信息构建内存层次结构

请记住,Google Drive不强制执行层次结构,因此一个文件可以有多个父级,祖父母也可以是子级

乙二醇


…是合法的

不要重复调用驱动器

实现所需功能的最佳方法是使用
files.list q=mimetype=application/vnd.google apps.folder
获取所有文件夹,然后使用每个文件夹的父信息构建内存层次结构

请记住,Google Drive不强制执行层次结构,因此一个文件可以有多个父级,祖父母也可以是子级

乙二醇


…是合法的

< P>,您可能需要考虑使用可用范围,如请求全驱动器范围,因为您需要在用户驱动器中列出或重新组织文件,如在

中讨论的。 请求格式:

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

另一方面,您也可以通过发送HTTP请求来检索您的文件列表,其中的所有可用参数都在.

中,您可能需要考虑使用可用范围,如请求完整驱动器范围,因为您需要与用户驱动程序中的文件进行列表或重排,如

中所讨论的。 请求格式:

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

另一方面,您也可以通过发送HTTP请求来检索文件列表,请求中提供了所有适用的参数。

java快速入门指南-

它们使用gradle。如果您更喜欢maven,请使用以下依赖项:

<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>

然后使用文件夹ID而不是查询中的“根”递归地构建层次结构。您可以通过查看给定文件资源的mimeType属性来判断它是文件夹还是文件-文件夹的mime类型是application/vnd.google apps.folder

java快速入门指南-

它们使用gradle。如果您更喜欢maven,请使用以下依赖项:

<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>
然后使用文件夹ID而不是查询中的“根”递归地构建层次结构。通过查看给定文件资源的mimeType属性,可以判断该资源是文件夹还是文件—文件夹的mime类型为application/vnd.google apps.folder

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