警告:无法更改每个人的权限:

时间:2015-06-04 04:14:57

标签: java google-drive-api

在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

8 个答案:

答案 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中遇到了同样的问题。这是一个解决方案:

  1. 以管理模式运行eclipse

  2. 清除目录 C:/Users/<username>.credentials/calendar-java-quickstart.json

  3. 将.json文件复制到bin目录,例如bin/main/resources/client_secret.json

  4. 你现在可以自由奔跑。

答案 3 :(得分:0)

我在https://developers.google.com/google-apps/calendar/quickstart/java示例中遇到了同样的问题。我怀疑问题是您在Windows中运行它,而您运行它的JVM没有管理员权限来更改Windows中的文件权限。

请参阅Run Java application as administrator on 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 /目录下。enter image description here

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再次进行身份验证。