Java Google API v3通过传递文件夹名称检查存在的文件夹
我正在使用GoogleAPIv3检查存在的文件夹。如果文件夹不存在,则创建新文件夹。这是我创建文件夹的代码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();
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请参见