在NetBeans中的https://developers.google.com/drive/web/quickstart/java?hl=hu运行Java快速入门示例时,我收到错误代码:
Jun 04, 2015 12:12:11 AM com.google.api.client.util.store.FileDataStoreFactory setPermissionsToOwnerOnly
WARNING: unable to change permissions for everybody:
C:\Users\Quibbles\credentials\drive-api-quickstart
我做错了什么?
编辑:这是完整的错误消息。
Jun 04, 2015 5:11:39 PM com.google.api.client.util.store.FileDataStoreFactory setPermissionsToOwnerOnly
WARNING: unable to change permissions for owner: C:\Users\Quibbles\.credentials\drive-api-quickstart
Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:78)
at java.io.InputStreamReader.<init>(InputStreamReader.java:72)
at DriveQuickstart.authorize(DriveQuickstart.java:64)
at DriveQuickstart.getDriveService(DriveQuickstart.java:87)
at DriveQuickstart.main(DriveQuickstart.java:96)
Java Result: 1
答案 0 :(得分:28)
遇到同样的问题并浪费了几个小时才意识到&#34;无法更改所有者的权限:C:\ Users \ Quibbles.credentials \ drive-api-quickstart&#34;
只是一个警告。
真正的问题是这里的空指针。
InputStream in =
DriveQuickstart.class.getResourceAsStream("/client_secret.json");
这条线就是我的问题。 &#34;在&#34;为null,因此为空指针。
InputStream in = new FileInputStream("<Full Path>\\client_secret.json");
这解决了我的问题。
答案 1 :(得分:11)
实际问题是Google的setPermissionsToOwnerOnly API代码中的错误
编写的代码仅适用于基于Linux / Unix的系统,而不适用于基于Windows ACL的系统。
您可以忽略该警告或编写自己的DataStore类,为Windows正确设置权限。
我也会试着向谷歌提交一个bug。
答案 2 :(得分:4)
我在Eclipse中遇到了同样的问题。这是一个解决方案:
以管理模式运行eclipse
清除目录
C:/Users/<username>.credentials/calendar-java-quickstart.json
将.json文件复制到bin目录,例如bin/main/resources/client_secret.json
你现在可以自由奔跑。
答案 3 :(得分:0)
我在https://developers.google.com/google-apps/calendar/quickstart/java示例中遇到了同样的问题。我怀疑问题是您在Windows中运行它,而您运行它的JVM没有管理员权限来更改Windows中的文件权限。
答案 4 :(得分:0)
运行教程“https://developers.google.com/drive/v2/web/quickstart/java”中给出的示例时遇到同样的问题。遵循教程中给出的指令同上,但不断获得此权限异常。最终,设法通过将“client_secret.json”移动到“\ build \ classes \ main \ classes”文件夹来对其进行排序。此外,在首次使用“gradle -q run”构建项目之前,请删除“C:\ Users \ userName \ .credentials”文件夹中的所有文件。
答案 5 :(得分:0)
只需确保client_secret.json位于main / resources /目录下。
InputStream in =
DriveQuickstart.class.getResourceAsStream("/json/client_secret.json");
答案 6 :(得分:0)
基本上,如果您已经启用de Drive API并在Google Drive API Rest上创建了certificate.json文件,则现在需要:
1-删除上次执行时生成的令牌目录。在此目录中包含一个文件StoredCredential。 2-如以下示例所示,将 SCOPE 更改为 DriveScopes.DRIVE :
私有静态列表SCOPES = Collections.singletonList(DriveScopes.DRIVE);
3-重新运行程序。将要求您登录自己的Google帐户以表示同意。
4-它会在您的项目中生成一个新的单令牌目录,并且现在具有对Google云端硬盘的读写权限。
这对我有用。
答案 7 :(得分:0)
能够通过删除令牌文件夹下的StoredCredentials文件来解决此问题。下次执行该程序时,我必须再次与Google再次进行身份验证。