GoogleドライブからAndroidへのファイルコピー


GoogleドライブからAndroidへファイルコピーの前提として、以下の記事をご覧ください。

AndroidからGoogleドライブへのファイルコピー

AndroidからGoogleドライブにファイルコピーした後の同名ファイル削除

 

AndroidからGoogleドライブへのファイルコピーと同様にファイルストリームを使用してファイルをコピーします。

getFilesTask()
        .continueWithTask(task -> {
            MetadataBuffer metadataBuffer = task.getResult();
            DriveId driveId = metadataBuffer.get(0).getDriveId();
            return getDriveResourceClient().openFile(driveId.asDriveFile(), DriveFile.MODE_READ_ONLY);
        })
        .continueWith(task -> {
            DriveContents driveContents = task.getResult();
            InputStream inputStream = driveContents.getInputStream();

            String restoreFile = /* Androidにコピーするファイル名 */ + ".tmp";
            FileOutputStream fileOutputStream = new FileOutputStream(restoreFile);
            byte[] buffer = new byte[inputStream.available()];
            int data;
            while ((data = inputStream.read(buffer)) != -1) {
                fileOutputStream.write(buffer, 0, data);
            }

            return restoreFile;
        })
        .addOnSuccessListener(this, restoreFile -> {
            File sourceFile = new File(restoreFile);
            File destFile = new File(restoreFile.replace(".tmp", ""));
            sourceFile.renameTo(destFile);
        })
        .addOnFailureListener(this, e -> {
            // 失敗時の処理
        })
        .addOnCompleteListener(this, result -> {
            // (必要なら)完了時の処理
        });

1~6行目 Googleドライブ上のファイルを取得するために、getFilesTask() でファイル一覧を取得し、先頭(最新)のファイルを取得します。

11,22~24行目 “.tmp”を付加しているのは、Androidに同名ファイルが存在した場合は、上書きしてしまいますので、転送エラーが発生した場合にファイルが破損する可能性があります。そのため、転送が成功したときに、ファイルをリネームして置き換えています。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください