Java GoogleCredential客户端API无法在web应用程序中找到文件路径

Java GoogleCredential客户端API无法在web应用程序中找到文件路径,java,file,google-calendar-api,Java,File,Google Calendar Api,我正在使用谷歌日历客户端API,并试图通过谷歌认证。 以下代码在独立应用程序中工作,在web应用程序环境中不工作。 对于web应用程序, SetServiceAccountPrivateKeyFromp12文件方法无法找到我提供的路径,我尝试了stackexchange用户给出的多种答案。 但对我来说没有用。每次它只显示一条消息,文件路径没有这样的文件或路径。 不知道怎么了。请帮我找到解决这个问题的办法 GoogleCredential credential = new GoogleCred

我正在使用谷歌日历客户端API,并试图通过谷歌认证。 以下代码在独立应用程序中工作,在web应用程序环境中不工作。 对于web应用程序, SetServiceAccountPrivateKeyFromp12文件方法无法找到我提供的路径,我尝试了stackexchange用户给出的多种答案。 但对我来说没有用。每次它只显示一条消息,文件路径没有这样的文件或路径。 不知道怎么了。请帮我找到解决这个问题的办法

GoogleCredential credential =   new GoogleCredential.Builder().setTransport(httpTransport)  
.setJsonFactory(JSON_FACTORY) 
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR))  
.setServiceAccountPrivateKeyFromP12File(new File(CLIENT_SECRET)).build();  
这里的私有静态最终字符串CLIENT_SECRET=credentials/Test.p12; 我尝试了类加载器,但没有用。始终引发FileNotFoundException。
我的项目是maven项目,代码位于从属jar文件中。

这不是Google客户端API的问题。 在web应用程序中,我们应该给出创建文件实例的绝对路径。 通常web应用程序提供相对路径,在Java中不可能使用此相对路径创建文件instace。 因为java.io.File不知道相对路径。它只知道创建文件实例的特定于操作系统的绝对路径 因此,字符串absoluteDiskPath=servletContext.getRealPath/credentials/secret.p12; 这是预期的工作。
感谢评论中的帮助。

您的路径正确且存在吗?当然,因为它是一个maven项目,所以我在resources文件夹中创建了credentials文件夹并放入该文件。因为您使用的是相对路径,所以该路径是否正确映射到您提到的文件夹?是的。我已经在正确的位置创建了文件夹,即resources文件夹,该代码作为jar文件生成,它是web应用程序的依赖文件。那么,定位文件是否存在问题?很可能是相对路径没有正确指定。请继续阅读