Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Google API v3通过传递文件夹名称检查存在的文件夹_Java_Android_Google Drive Api_Google Api Java Client - Fatal编程技术网

Java Google API v3通过传递文件夹名称检查存在的文件夹

Java Google API v3通过传递文件夹名称检查存在的文件夹,java,android,google-drive-api,google-api-java-client,Java,Android,Google Drive Api,Google Api Java Client,我正在使用GoogleAPIv3检查存在的文件夹。如果文件夹不存在,则创建新文件夹。这是我创建文件夹的代码 private void createFolderInDrive() throws IOException { boolean existed = checkExistedFolder("MyFolder"); if (existed = false) { File fileMetadata = new File();

我正在使用GoogleAPIv3检查存在的文件夹。如果文件夹不存在,则创建新文件夹。这是我创建文件夹的代码

 private void createFolderInDrive() throws IOException {
        boolean existed = checkExistedFolder("MyFolder");

        if (existed = false) {
            File fileMetadata = new File();
            fileMetadata.setName("MyFolder");
            fileMetadata.setMimeType("application/vnd.google-apps.folder");

            File file = mService.files().create(fileMetadata)
                    .setFields("id")
                    .execute();
            System.out.println("Folder ID: " + file.getId());

            Log.e(this.toString(), "Folder Created with ID:" + file.getId());



       Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(getApplicationContext(),
                    "Folder is existed already", Toast.LENGTH_SHORT).show();
        }


    }
下面是检查exist文件的代码

private boolean checkExistedFolder(String folderName) {
        //File file = null;
        boolean existedFolder = true;
        // check if the folder exists already
        try {
            //String query = "mimeType='application/vnd.google-apps.folder' and trashed=false and title='" + "Evacuation Kit" + "'";
            String query = "mimeType='application/vnd.google-apps.folder' and trashed=false and name='Evacuation Kit'";
            // add parent param to the query if needed
            //if (parentId != null) {
            //query = query + " and '" + parentId + "' in parents";
            // }

            Drive.Files.List request = mService.files().list().setQ(query);
            FileList fileList = request.execute();

            if (fileList.getFiles().size() == 0 ) {
                // file = fileList.getFiles().get(0);
                existedFolder = false;

            }


        } catch (IOException e) {
            e.printStackTrace();

        }
        return existedFolder;

fileList.getFiles().size()保持返回3,即使g驱动器上没有文件夹。你们能告诉我哪里做错了吗?

此代码将检查驱动器上是否存在文件夹。如果存在,它将返回id,否则创建文件夹并返回id

private DriveFile file;

GoogleApiClient mGoogleApiClient;

@Override
public void onConnected(@Nullable Bundle bundle) {
    Log.e(TAG, "connected");
    new Thread(new Runnable() {
        @Override
        public void run() {
            DriveId Id = getFolder(Drive.DriveApi.getRootFolder(mGoogleApiClient).getDriveId(), "FOLDER_NAME");
            Log.e(TAG, "run: " + Id);
        }
    }).start();
}

DriveId getFolder(DriveId parentId, String titl) {
    DriveId dId = null;
    if (parentId != null && titl != null) try {
        ArrayList<Filter> fltrs = new ArrayList<>();
        fltrs.add(Filters.in(SearchableField.PARENTS, parentId));
        fltrs.add(Filters.eq(SearchableField.TITLE, titl));
        fltrs.add(Filters.eq(SearchableField.MIME_TYPE, DriveFolder.MIME_TYPE));
        Query qry = new Query.Builder().addFilter(Filters.and(fltrs)).build();

        MetadataBuffer mdb = null;
        DriveApi.MetadataBufferResult rslt = Drive.DriveApi.query(mGoogleApiClient, qry).await();
        if (rslt.getStatus().isSuccess()) try {
            mdb = rslt.getMetadataBuffer();
            if (mdb.getCount() > 0)
                dId = mdb.get(0).getDriveId();
        } catch (Exception ignore) {
        } finally {
            if (mdb != null) mdb.close();
        }

        if (dId == null) {
            MetadataChangeSet meta = new MetadataChangeSet.Builder().setTitle(titl).setMimeType(DriveFolder.MIME_TYPE).build();
            DriveFolder.DriveFolderResult r1 = parentId.asDriveFolder().createFolder(mGoogleApiClient, meta).await();
            DriveFolder dFld = (r1 != null) && r1.getStatus().isSuccess() ? r1.getDriveFolder() : null;
            if (dFld != null) {
                DriveResource.MetadataResult r2 = dFld.getMetadata(mGoogleApiClient).await();
                if ((r2 != null) && r2.getStatus().isSuccess()) {
                    dId = r2.getMetadata().getDriveId();
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return dId;
}
私有驱动文件;
GoogleapClient MGoogleapClient;
@凌驾
未连接的公共无效(@Nullable Bundle){
Log.e(标记“已连接”);
新线程(newrunnable()){
@凌驾
公开募捐{
DriveId=getFolder(Drive.DriveApi.getRootFolder(mGoogleApiClient.getDriveId(),“文件夹名称”);
Log.e(标签“run:+Id”);
}
}).start();
}
DriveId getFolder(DriveId parentId,字符串标题){
DriveId dId=null;
如果(parentId!=null&&titl!=null)尝试{
ArrayList fltrs=新的ArrayList();
fltrs.add(Filters.in(SearchableField.PARENTS,parentId));
外文添加(Filters.eq(SearchableField.TITLE,titl));
添加(Filters.eq(SearchableField.MIME_TYPE,DriveFolder.MIME_TYPE));
Query qry=new Query.Builder().addFilter(Filters.and(fltrs)).build();
MetadataBuffer mdb=null;
DriveApi.MetadataBufferResult rslt=Drive.DriveApi.query(mGoogleApiClient,qry).await();
如果(rslt.getStatus().issucess())尝试{
mdb=rslt.getMetadataBuffer();
如果(mdb.getCount()>0)
dId=mdb.get(0.getDriveId();
}捕获(异常忽略){
}最后{
如果(mdb!=null)mdb.close();
}
if(dId==null){
MetadataChangeSet meta=new MetadataChangeSet.Builder().setTitle(titl).setMimeType(DriveFolder.MIME_TYPE).build();
DriveFolder.DriveFolderResult r1=parentId.asDriveFolder().createFolder(mgoogleAppClient,meta).await();
DriveFolder dFld=(r1!=null)和&r1.getStatus().issucess()?r1.getDriveFolder():null;
如果(dFld!=null){
DriveResource.MetadataResult r2=dFld.getMetadata(mgoogleapClient.await();
if((r2!=null)&&r2.getStatus().issucess()){
dId=r2.getMetadata().getDriveId();
}
}
}
}捕获(例外e){
e、 printStackTrace();
}
返回没有;
}

在您显示的代码中,
checkExistedFolder
始终在查找名称“疏散工具包”,而不使用参数
folderName
。也许这就是为什么你总是从
fileList.getFiles().size()
中得到3的主要原因


if(existed=false)
中还有一个赋值,您应该使用
if(false==existed)
-使用比较左侧的静态值有助于避免此类错误,或者
if(!existed)
。请注意,在调用Files:list时检查nextPageToken非常重要,以检查是否有更多页面要查找该文件。请参阅此处的更多信息和在Kotlin上为我工作的代码:

 override fun createFolder(name: String): Task<GoogleDriveFileHolder> {

        check(googleDriveService != null) { "You have to init Google Drive Service first!" }
        check(search(name, FOLDER_MIME_TYPE).not()){"folder already exist"}

        return Tasks.call<GoogleDriveFileHolder>(
            mExecutor,
            Callable<GoogleDriveFileHolder> {

                val metadata = File()
                    .setMimeType(FOLDER_MIME_TYPE)
                    .setName(name)

                GoogleDriveFileHolder(
                    googleDriveService!!.files()
                        .create(metadata)
                        .setFields("id")
                        .execute() ?: throw IOException("Null result when requesting file creation.")
                )
            })
    }

    private fun search(name: String, mimeType:String): Boolean {

        var pageToken: String? = null

        do {

            val result: FileList =
                googleDriveService!!
                    .files()
                    .list()
                    .setQ("mimeType='$FOLDER_MIME_TYPE'")
                    .setSpaces("drive")
                    .setFields("nextPageToken, files(id, name)")
                    .setPageToken(pageToken)
                    .execute()

            for (file in result.files) {
                Log.d(TAG_UPLOAD_FILE , "Found file: %s (%s)\n ${file.name}, ${file.id} ")
                if (name == file.name) return true
            }

            pageToken = result.nextPageToken

        } while (pageToken != null)

        return false
    }

private const val FOLDER_MIME_TYPE= "application/vnd.google-apps.folder"
覆盖文件夹(名称:字符串):任务{
选中(googleDriveService!=null){“您必须先初始化googleDriveService!”}
检查(搜索(名称、文件夹\u MIME\u类型).not()){“文件夹已存在”}
return Tasks.call(
梅克西托,
可调用{
val元数据=文件()
.setMimeType(文件夹\u MIME\u类型)
.setName(名称)
GoogleDriveFileHolder(
googleDriveService!!.files()
.create(元数据)
.设置字段(“id”)
.execute()?:抛出IOException(“请求文件创建时的结果为空”)
)
})
}
私人趣味搜索(名称:String,mimeType:String):布尔值{
var pageToken:字符串?=null
做{
val结果:文件列表=
谷歌汽车服务!!
.files()
.list()
.setQ(“mimeType='$FOLDER\u MIME\u TYPE')
.setSpaces(“驱动器”)
.setFields(“nextPageToken,文件(id,名称)”)
.setPageToken(pageToken)
.execute()
for(result.files中的文件){
Log.d(标记上传文件,“找到的文件:%s(%s)\n${FILE.name},${FILE.id}”)
如果(name==file.name)返回true
}
pageToken=result.nextPageToken
}while(pageToken!=null)
返回错误
}
private const val FOLDER_MIME_TYPE=“application/vnd.google apps.FOLDER”
过期的API请参见