嘿,我在github上关注Google云端硬盘的快速入门:
我使用了SCOPE_APPFOLDER,所以当我运行该应用程序时,它要求我登录到Google帐户并授予打开“应用程序文件夹”的权限,在我接受之后,我转到了Google驱动器,是的,它在“应用程序管理器”(1KB)。
我的问题是: 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?以及如何下载/还原此文件并将其放回设备内的应用文件夹?
谢谢你们:)
答案 0 :(得分:0)
可以使用别名访问特定于应用程序的文件夹 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 :(得分: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());
}
中的 DriverServiceHelper 类