我需要以编程方式阅读存储在Google云端硬盘中的文件内容。我很期待某种形式
InputStream is = <drive_stuff>.read(fileID);
有帮助吗?如果我可以使用某种方式回写文件,我也会很感激
OutputStream dos = new DriveOutputStream(driveFileID);
dos.write(data);
如果这种方便的方法对于Drive可以提供的内容来说太多了,那么我想就如何直接从java.io.InputStream / OutputStream / Reader / Writer读取/写入Drive而不创建临时本地文件的建议我想要发送到驱动器的数据的副本。谢谢!
请查看Google Drive SDK documentation上提供的DrEdit Java示例。此示例显示如何授权和构建读取元数据,文件数据和将内容上载到Google云端硬盘的请求。
以下是一个代码段,展示了如何使用ByteArrayContent
将媒体上传到存储在字节数组中的Google云端硬盘:
/**
* Create a new file given a JSON representation, and return the JSON
* representation of the created file.
*/
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
Drive service = getDriveService(req, resp);
ClientFile clientFile = new ClientFile(req.getReader());
File file = clientFile.toFile();
if (!clientFile.content.equals("")) {
file = service.files().insert(file,
ByteArrayContent.fromString(clientFile.mimeType, clientFile.content))
.execute();
} else {
file = service.files().insert(file).execute();
}
resp.setContentType(JSON_MIMETYPE);
resp.getWriter().print(new Gson().toJson(file.getId()).toString());
}
这是我的应用程序中的一个(不完整的)片段,可能有所帮助。
URL url = new URL(urlParam);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("GET");
connection
.setRequestProperty("Authorization",
"OAuth "+accessToken);
String docText = convertStreamToString(connection.getInputStream());
使用google-api-services-drive-v3-rev24-java-1.22.0:
要读取文件的内容,请确保在凭证授权方法/代码中执行DriveScopes.DRIVE_READONLY
时设置GoogleAuthorizationCodeFlow.Builder(...)
。
你需要你想要阅读的文件的fileId
。你可以这样做:
FileList result = driveService.files().list().execute();
然后你可以为你要阅读的result
和file
迭代fileId
。
完成后,阅读内容将是这样的:
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
driveService.files().get(fileId).executeMediaAndDownloadTo(outputStream);
InputStream in = new ByteArrayInputStream(outputStream.toByteArray());
//构建新的授权API客户端服务。 Drive service = getDriveService();
// Print the names and IDs for up to 10 files.
FileList result = service.files().list()
.setPageSize(10)
.setFields("nextPageToken, files(id, name)")
.execute();
List<File> files = result.getFiles();
if (files == null || files.size() == 0) {
System.out.println("No files found.");
} else {
System.out.println("Files:");
for (File file : files) {
System.out.printf("%s (%s)\n", file.getName(), file.getId());
String fileId = file.getId();
Export s=service.files().export(fileId, "text/plain");
InputStream in=s.executeMediaAsInputStream();
InputStreamReader isr=new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
String line = null;
StringBuilder responseData = new StringBuilder();
while((line = br.readLine()) != null) {
responseData.append(line);
}
System.out.println(responseData);
}
}
}