将jar中的文件作为java.io.file对象读取

将jar中的文件作为java.io.file对象读取,java,Java,类似的问题也被贴出来了,但是没有一个答案对我有帮助。 我正在写一个软件包,它使用谷歌的认证来获取谷歌应用程序的用户。为此,我正在使用一个服务帐户,因此为了检索凭据,我需要(除其他外)提供一个p12签名文件: Credential credential = null; try { credential = new GoogleCredential.Builder().setTransport(httpTransport) .setJso

类似的问题也被贴出来了,但是没有一个答案对我有帮助。 我正在写一个软件包,它使用谷歌的认证来获取谷歌应用程序的用户。为此,我正在使用一个服务帐户,因此为了检索凭据,我需要(除其他外)提供一个p12签名文件:

   Credential credential = null;
    try {
        credential = new GoogleCredential.Builder().setTransport(httpTransport)
                .setJsonFactory(jsonFactory)
                .setServiceAccountId(serviceAccountEmail)
                .setServiceAccountScopes(SCOPES)
                .setServiceAccountUser(serviceAccountUser)
            .setServiceAccountPrivateKeyFromP12File( java.io.File ))
最后一个函数必须接收p12签名文件的java.io.File对象。现在,这整件事都在我提供给其他人的罐子里运行,这造成了大部分问题。无论采用哪种方法,在jar中运行时,我都无法读取文件。在我尝试过的事情中:

return new File(GoogleUserFactory.class.getClassLoader().getResource("/" +  filePath).toURI()); 
//(我也尝试过不使用“/”并直接使用class.GetResource())

//我还尝试了class.GetClassLoader.GetResource()


甚至尝试将文件作为InputStreamReader读取并写入新文件(之后我将为其创建文件对象并返回它),但由于我在一个jar中,我似乎没有权限写入新文件)

可能您可以使用
.setServiceAccountPrivateKey(SecurityUtils.loadPrivateKeyFromKeyStore(SecurityUtils.getPkcs12KeyStore(),一些输入流,“notasecret”,“privatekey”,“notasecret”);
,如建议的那样?

请在不使用getClassLoader()的情况下尝试。可能您已经尝试过了。但它必须工作。如果您收到NullPointerException文件路径可能错误

File File=new文件(GoogleUserFactory.class.getResource(“/”+filePath.toURI());

java.io.File
与文件系统配合使用;另一个文件中的内容与ls或dir控制台命令相比,不在文件系统中。如果您使用java 7并且此API可以从
路径读取
,那么您可以使用zip
文件系统
Google应该为提供从文件,而不是从输入流读取。最好的办法是将资源复制到一个临时文件,并将此临时文件传递到google API.JB Nizet,就是这样,由于权限问题,我似乎无法创建临时文件。fge,Path类基本上使用了与File类似的本地文件系统,它创建了sa当在jarYes中运行时,我遇到了一个问题。最终,我就是这么做的,它解决了我的问题。然而,为了将此功能添加到GoogleCredential#Builder类中,我不得不修改Google的api客户端源代码并自己构建它。
URL url = GoogleUserFactory.class.getResource("/" + filePath);
return new File(url.getPath());