java.io.EOFException GDrive API授权

java.io.EOFException GDrive API授权,java,google-app-engine,google-drive-api,Java,Google App Engine,Google Drive Api,我目前正在按照教程从doogle驱动器获取文件列表。在我得到以下异常 Caused by: java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source) at java.io.ObjectInputS

我目前正在按照教程从doogle驱动器获取文件列表。在我得到以下异常

Caused by:

java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at com.google.api.client.util.IOUtils.deserialize(IOUtils.java:171)
    at com.google.api.client.util.store.FileDataStoreFactory$FileDataStore.<init>(FileDataStoreFactory.java:102)
    at com.google.api.client.util.store.FileDataStoreFactory.createDataStore(FileDataStoreFactory.java:73)
    at com.google.api.client.util.store.AbstractDataStoreFactory.getDataStore(AbstractDataStoreFactory.java:55)
    at com.google.api.client.auth.oauth2.StoredCredential.getDefaultDataStore(StoredCredential.java:171)
    at com.google.api.client.auth.oauth2.AuthorizationCodeFlow$Builder.setDataStoreFactory(AuthorizationCodeFlow.java:736)
    at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder.setDataStoreFactory(GoogleAuthorizationCodeFlow.java:209)
    at com.demo.gapps.server.FetchNewFilesCron.authorize(FetchNewFilesCron.java:233)
    at com.demo.gapps.server.FetchNewFilesCron.getDriveService(FetchNewFilesCron.java:244)
    at com.demo.gapps.server.FetchNewFilesCron.doGet(FetchNewFilesCron.java:97)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:128)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:50)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:511)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
错误可能在
.setDataStoreFactory(数据存储工厂)

谁能告诉我这个错误吗


谢谢,

异常表示文件结束(EOF),或者意外到达流结束。此外,此异常主要由
DataInputStreams
使用,以发出流结束的信号。但是,请注意,其他输入操作可能会在流结束时返回特殊值,而不是抛出
EOFException

EOFEException
类扩展了IOException类,IOException类是由失败或中断的I/O操作产生的一般异常类。此外,它还实现了可序列化接口。此外,它被定义为已检查异常,因此必须在方法或构造函数的throws子句中声明

DataInputStreams
提供了一些方法,这些方法可以以独立于机器的方式从底层输入流中读取基本Java数据类型。应用程序使用OutputStream类或DataOutputStream类提供的方法写入数据


有关更多信息,请查看讨论EOFEException和DataInputStream的相关SO票证:

异常表示文件结束(EOF),或意外到达流结束。此外,此异常主要由
DataInputStreams
使用,以发出流结束的信号。但是,请注意,其他输入操作可能会在流结束时返回特殊值,而不是抛出
EOFException

EOFEException
类扩展了IOException类,IOException类是由失败或中断的I/O操作产生的一般异常类。此外,它还实现了可序列化接口。此外,它被定义为已检查异常,因此必须在方法或构造函数的throws子句中声明

DataInputStreams
提供了一些方法,这些方法可以以独立于机器的方式从底层输入流中读取基本Java数据类型。应用程序使用OutputStream类或DataOutputStream类提供的方法写入数据


有关更多信息,请查看此相关的SO票证,其中讨论了EOFEException和DataInputStream:

我知道这是一篇旧文章,但我有几乎完全相同的stacktrace,唯一的答案没有多大帮助。所以,我在这里发帖,希望它能帮助那些在我之后的人


该问题似乎与文件/目录权限有关。只要我将FileDataStoreFactory使用的文件路径更改为我的应用程序具有读/写权限的目录,OAuth2就会正常工作。因此,请确保您使用的是非受限文件路径,并且所有目录都具有正确的所有权和权限。

我知道这是一篇旧文章,但我有几乎完全相同的stacktrace,唯一的答案不是很有帮助。所以,我在这里发帖,希望它能帮助那些在我之后的人


该问题似乎与文件/目录权限有关。只要我将FileDataStoreFactory使用的文件路径更改为我的应用程序具有读/写权限的目录,OAuth2就会正常工作。因此,请确保您使用的是非受限文件路径,并且所有目录都具有正确的所有权和权限。

实际上,我在本地环境中遇到了此异常,而在Google App Engine development server上遇到了以下异常。您能在java.security.AccessControlException.java.security.AccessControlContext.checkPermission(AccessControlContext.java:484)的java.security.AccessController.checkPermission(AccessController.java:698)的java.lang.SecurityManager.checkPermission中为我提供指导吗com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:55)java.lang.SecurityManager.checkRead(SecurityManager.java:888)java.io.File.exists(File.java:877)google app engine似乎不允许我创建和读取文件。可能的问题是什么?实际上,在google app engine开发服务器上,我在本地环境中遇到了此异常,但我遇到了以下异常。您能用java.security.AccessControlException:access denied指导我吗(java.security.AccessControlContext.checkPermission(AccessControlContext.java:484)处的java.security.AccessController.checkPermission(AccessController.java:698)处的java.lang.SecurityManager.checkPermission(SecurityManager.java:549)com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:55)java.lang.SecurityManager.checkRead(SecurityManager.java:888)java.io.File.exists(File.java:877)google app engine似乎不允许我创建和读取文件。可能的问题是什么?您是否仍遇到此问题?是否有更新,您是否已设法解决此问题?是否仍遇到此问题?是否有更新,您是否已设法解决此问题?
* @return an authorized Credential object.
         * @throws IOException
         */
        public static Credential authorize() throws IOException {

            System.out.println("file path is "+DATA_STORE_DIR.getPath());

            // Load client secrets.
            InputStream in =
                FetchNewFilesCron.class.getResourceAsStream("/client_secrets.json");
            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(DATA_STORE_FACTORY)
                    .setAccessType("offline")
                    .build();
            Credential credential = new AuthorizationCodeInstalledApp(
                flow, new LocalServerReceiver()).authorize("user");
            System.out.println(
                    "Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
            return credential;
        }