AndroidからGoogleドライブへのファイルコピー からの続きです。
Android から Googleドライブに同名ファイルをコピー(作成)しても上書きしてくれず、同名のファイルが何個も出来てしまいます。
そこで、コピーした後に旧ファイルを削除する処理が必要となります。
削除するためには、Googleドライブ上のファイル一覧を取得し、削除するのですが、一覧取得処理と削除処理は他でも流用するので、メソッド化しておきます。
/** * Googleドライブのファイル一覧取得タスク * * @return Task<MetadataBuffer> */ private Task<MetadataBuffer> getFilesTask() { final String fileName = /* 取得するファイル名 */; // 作成日の降順で取得 SortOrder sortOrder = new SortOrder.Builder() .addSortDescending(SortableField.CREATED_DATE) .build(); Query query = new Query.Builder() .addFilter(Filters.eq(SearchableField.TITLE, fileName)) .addFilter(Filters.eq(SearchableField.TRASHED, false)) // ゴミ箱は除外 .setSortOrder(sortOrder) .build(); return getDriveResourceClient().query(query); }
/** * Googleドライブのファイル削除 * * @param driveId */ private void deleteBackupFile(DriveId driveId) { getDriveResourceClient() .delete(driveId.asDriveResource()) .addOnFailureListener(this, e -> { // 失敗したときの処理 }); }
これらのメソッドを使用して、旧ファイルを削除するための処理です。
getBackupFilesTask() .addOnSuccessListener(this, metadataBuffer -> { int fileCount = metadataBuffer.getCount(); if (fileCount > 1) { for (int i = 1; i < fileCount; i++) { Metadata metadata = metadataBuffer.get(i); deleteBackupFile(metadata.getDriveId()); } } }) .addOnFailureListener(this, e -> { // 失敗したときの処理 });
metadataBuffer 配列の1番目に新しくコピーしたファイル、2番目に旧ファイルの情報が入っているので2番目だけピンポイントで削除するだけでも良いのですが、複数個旧ファイルがあった場合に全て削除するように見つかった件数分削除処理を行っています。