Google驱动器API无法列出文件(v3 Java)
我在Java中使用GoogleAPI,并有以下代码片段Google驱动器API无法列出文件(v3 Java),java,google-api,google-drive-api,Java,Google Api,Google Drive Api,我在Java中使用GoogleAPI,并有以下代码片段 import java.io.FileNotFoundException; import java.io.IOException; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.security.GeneralSecurityEx
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.GeneralSecurityException;
import java.util.Collections;
import java.util.List;
import java.lang.Object;
import java.util.ArrayList;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.Drive.Files;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.FileList;
public class DriveQuickstart {
private static final String APPLICATION_NAME = "DriveQuickstart";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final String TOKENS_DIRECTORY_PATH = "tokens";
// * Global instance of the scopes required by this quickstart.
// * If modifying these scopes, delete your previously saved tokens/ folder.
private static final List<String> SCOPES = Collections.singletonList(DriveScopes.DRIVE_METADATA_READONLY);
private static final String CREDENTIALS_FILE_PATH = "C:/Quickstart/src/main/resources/client_secret.json";
// * Creates an authorized Credential object.
// * @param HTTP_TRANSPORT The network HTTP Transport.
// * @return An authorized Credential object.
// * @throws IOException If the client_secret.json file cannot be found.
// */
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
// Load client secrets.
InputStream in = new FileInputStream(CREDENTIALS_FILE_PATH);
if (in == null) {
throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
}
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
.setAccessType("offline")
.build();
LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
}
public static void main(String[] args) throws IOException, GeneralSecurityException {
try
{
// Build a new authorized API client service.
System.out.println("This is a test line");
//declare final variable NetHttpTransport and GoogleNetHttpTransport from import statements
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
System.out.println("This is the second test line");
Drive service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
System.out.println("This is the third test line");
// Print the names and IDs for files.
FileList result = service.files().list()
.setPageSize(10)
.setFields("nextPageToken, files(id, name)")
.execute();
List<File> files = result.getFiles();
if (files == null || files.isEmpty()) {
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());
}
}
Drive.Files var1 = service.files();
System.out.println("var1 = " + var1.toString());
Drive.Files.List var2 = var1.list();
if (var2 == null)
System.out.println("null");
else {
System.out.printf("Var2 size is: %d\n", var2.size() );
}
//iterate through map and print results
}
catch(Exception e){
System.out.println("error");
}
System.out.println("This is the fourth test line");
}
}
}
出于某种原因,我不知道/不理解,这是唯一一种不会从不存在的导入jar文件返回方法的方法。请熟悉,看看如何获得API调用的结果 问题 1-自动设置许可证 我不知道发生了什么事。第一次编译和运行时,我在chrome中打开了一个选项卡,请求获得访问元数据的权限以驱动程序。第二次,它给出了“警告:无法更改每个人的权限:”错误 这似乎与我有关。这可能意味着用于从中运行代码的文件夹具有与预期不同的权限 如果您将代码放在桌面上(例如),然后从桌面上运行,是否会发生这种情况 2-
toString()
最重要的是,var1('set to service.files()')返回com.google.api.services.drive.drive$Files@458ad742使用toString()时。分配给var2的子类service.files().list()应该返回我的Google驱动器中的文件列表,但显然不是这样
这个奇怪的字符串是Java打印类实例的方式
com.google.api.services.drive.Drive$Files@458ad742
<NAMESPACE>$<CLASS>@<HASHCODE>
com.google.api.services.drive.drive$Files@458ad742
$@
toString
方法打印出这个事实意味着这个方法没有为此被覆盖,因此它调用了常规
要打印出您想要看到的内容,请尝试嵌套方法。我已经按照教程进行了操作,我打开了chrome中的选项卡,请求访问元数据的权限。之后我的问题是打印10个文件的名称和ID的代码没有运行。因此,我试图通过返回值来手动检查它是否正在访问Drive.Files及其子类。Hello@Phanotak,在授予应用程序权限后,您看到了什么?如果可能,请添加完整的日志输出和屏幕截图。发布完整的代码,并添加了我的命令提示符输出的屏幕截图和它打开的google选项卡。如果我删除StoredCredential并运行它,它会打开google选项卡,发出不安全通知,选择帐户并请求访问google drive上元数据的权限。我不知道它是否与此链接有关。让它工作起来。我所做的只是重做教程并将其直接放入C://Quickstart,而不是将一些复杂的长目录名放入4-5个子文件夹中。谢谢你的帮助,我真的很感激有人愿意帮忙。
com.google.api.services.drive.Drive$Files@458ad742
<NAMESPACE>$<CLASS>@<HASHCODE>