8

问题是:如何在没有重复的谷歌驱动器中创建文件夹?

我正在回答这篇文章中的问题,并且我想与正在寻找类似解决方案或要解决的问题的任何人分享此代码。

4

1 回答 1

4

我遇到的问题是如何在谷歌驱动器中创建文件夹路径而不会在驱动器中出现重复文件夹!

用于检查文件夹在其标题中存在的第一个函数,传递您的驱动器实例和文件夹的标题以及它的父 ID(不是标题):

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

该函数用于在 givien parents 引用中创建文件夹,如果列表为空,则该文件夹将在 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;

}

第三个函数用于在 google drive 中创建不重复的文件夹的目录路径。为了防止谷歌驱动器中的重复文件夹,该功能会在创建之前检查文件夹是否存在。

/**
 * 
 * @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;
}
于 2013-08-11T08:48:34.600 回答