Android Studio Google Drive AppFolder备份和还原(数据库文件)

时间:2018-06-25 19:59:17

标签: android database android-studio database-backups google-drive-android-api

嘿,我在github上关注Google云端硬盘的快速入门:

https://github.com/gsuitedevs/android-samples/blob/master/drive/demos/app/src/main/java/com/google/android/gms/drive/sample/demo/CreateFileInAppFolderActivity.java

我使用了SCOPE_APPFOLDER,所以当我运行该应用程序时,它要求我登录到Google帐户并授予打开“应用程序文件夹”的权限,在我接受之后,我转到了Google驱动器,是的,它在“应用程序管理器”(1KB)。 enter image description here

我的问题是: 1)如何将数据库文件(具有路径)上载到Google Drive AppFolder? 2)如何下载要从AppFolder上传的数据库文件,并将其放在所需的路径中?

我正在编写一些代码,以备份到设备内的那些数据库文件 BUT ,如下所示:

    //Back Up 
private void BackUp() {
    try {
        final String inFileName = "/data/user/0/com******/databases/**********";
        File dbFile = new File(inFileName);
        FileInputStream fis = new FileInputStream(dbFile);
        String outFileName = Environment.getExternalStorageDirectory() + "/********";

        // Open the empty db as the output stream
        OutputStream output = new FileOutputStream(outFileName);
        // Transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = fis.read(buffer)) > 0) {
            output.write(buffer, 0, length);
        }
        // Close the streams
        output.flush();
        output.close();
        fis.close();
    } catch (Exception e) {

    }
}

我如何使用上述代码之类的东西来谷歌驱动器AppFolder ????

下面是我用于Google Drive Stufe的代码

//Path of the file
 final String inFileName = "/data/user/0/com.******/databases/Categor****";
 File dbFile = new File(inFileName);

我用它来创建AppFolder:

    private void createFileInAppFolder() {
    final Task<DriveFolder> appFolderTask = getDriveResourceClient().getAppFolder();
    final Task<DriveContents> createContentsTask = getDriveResourceClient().createContents();
    Tasks.whenAll(appFolderTask, createContentsTask)
            .continueWithTask(task -> {
                DriveFolder parent = appFolderTask.getResult();
                DriveContents contents = createContentsTask.getResult();
                OutputStream outputStream = contents.getOutputStream();
                try (Writer writer = new OutputStreamWriter(outputStream)) {
                    writer.write("Hello World!");
                }

                MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                        .setTitle("New file")
                        .setMimeType("text/plain")
                        .setStarred(true)
                        .build();
                final String inFileName = "/data/user/0/com.camel.work_list/databases/CategoriesSpinner";
                File dbFile = new File(inFileName);
                FileInputStream fis = new FileInputStream(dbFile);

                MetadataChangeSet test = new MetadataChangeSet(fis);

                return getDriveResourceClient().createFile(parent, changeSet, contents);
            })
            .addOnSuccessListener(this,
                    driveFile -> {
                        showMessage(getString(R.string.file_created));
                        //finish();
                    })
            .addOnFailureListener(this, e -> {
                Log.e(TAG, "Unable to create file", e);
                showMessage(getString(R.string.file_create_error));
                //finish();
            });
}

所以我从这段代码中了解到,当它打开一个AppFolder时,它会使用“ Hello World”创建一些文本文件。

如何从数据库中获取文件并上传到此AppFolder?以及如何下载/还原此文件并将其放回设备内的应用文件夹?

谢谢你们:)

2 个答案:

答案 0 :(得分:0)

  1. 使用“应用程序数据”文件夹
  

可以使用别名访问特定于应用程序的文件夹   appDataFolder。可以像使用其他任何文件夹ID一样使用此别名。对于   例如,列出位于您的正下方的文件时   应用程序的文件夹或使用appDataFolder创建文件时   父母。

将文件插入“应用程序数据”文件夹

File fileMetadata = new File();
fileMetadata.setName("config.json");
fileMetadata.setParents(Collections.singletonList("appDataFolder"));
java.io.File filePath = new java.io.File("files/config.json");
FileContent mediaContent = new FileContent("application/json", filePath);
File file = driveService.files().create(fileMetadata, mediaContent)
    .setFields("id")
    .execute();
System.out.println("File ID: " + file.getId());
  1. 关注 Download Files

    • 下载文件-带有alt = media文件资源的files.get
    • 下载并导出Google文档-files.export
    • 将用户链接到文件-来自文件资源的webContentLink

答案 1 :(得分:0)

有关备份Google云端硬盘的“应用数据”文件夹中的文件的信息,请参阅此官方文档。 https://developers.google.com/drive/api/v3/appdata

链接摘录:

在应用程序数据文件夹中创建文件

File fileMetadata = new File();
fileMetadata.setName("config.json");
fileMetadata.setParents(Collections.singletonList("appDataFolder"));
java.io.File filePath = new java.io.File("files/config.json");
FileContent mediaContent = new FileContent("application/json", filePath);
File file = driveService.files().create(fileMetadata, mediaContent)
    .setFields("id")
    .execute();
System.out.println("File ID: " + file.getId());

在应用程序数据文件夹中搜索文件

FileList files = driveService.files().list()
    .setSpaces("appDataFolder")
    .setFields("nextPageToken, files(id, name)")
    .setPageSize(10)
    .execute();
for (File file : files.getFiles()) {
  System.out.printf("Found file: %s (%s)\n",
      file.getName(), file.getId());
}

使用this link

中的 DriverServiceHelper