java.io.FileNotFoundException:/key.p12:open failed:ENOENT(没有这样的文件或目录)

时间:2015-03-30 07:29:00

标签: java android google-api google-bigquery

我正在处理我在Android应用中使用bigquery的应用。我在API控制台上创建了一个项目。

我已将p12文件放在应用程序的assets文件夹中,并且在代码中有正确的路径,但我收到错误java.io.FileNotFoundException: /key.p12: open failed: ENOENT (No such file or directory)

请帮助我解决它需要做的改变。

    try {
        credential = new GoogleCredential.Builder().setTransport(TRANSPORT)
                .setJsonFactory(JSON_FACTORY)
                .setServiceAccountScopes(SCOPES)
                .setServiceAccountId("xxxxxxxxxxxxxxxx@developer.gserviceaccount.com")
                .setServiceAccountPrivateKeyFromP12File(new File("key.p12"))
                .build();
    } catch (GeneralSecurityException | IOException e1) {
        e1.printStackTrace();
    }

3 个答案:

答案 0 :(得分:4)

这是从资产中读取文件的正确方法:

    try {
        AssetManager am = getAssets();
        InputStream inputStream = am.open("key.p12");
        File file = createFileFromInputStream(inputStream);

        credential = new GoogleCredential.Builder().setTransport(TRANSPORT)
                .setJsonFactory(JSON_FACTORY)
                .setServiceAccountScopes(SCOPES)
                .setServiceAccountId("xxxxxxxxxxxxxxxx@developer.gserviceaccount.com")
                .setServiceAccountPrivateKeyFromP12File(file )
                .build();
    } catch (GeneralSecurityException | IOException e1) {
        e1.printStackTrace();
    }

从InputStream创建文件

private File createFileFromInputStream(InputStream inputStream) {

   try{
      File f = new File(my_file_name);
      OutputStream outputStream = new FileOutputStream(f);
      byte buffer[] = new byte[1024];
      int length = 0;

      while((length=inputStream.read(buffer)) > 0) {
        outputStream.write(buffer,0,length);
      }

      outputStream.close();
      inputStream.close();

      return f;
   }catch (IOException e) {
         //Logging exception
   }

   return null;
}

答案 1 :(得分:0)

本教程:http://examples.javacodegeeks.com/java-basics/exceptions/java-io-filenotfoundexception-how-to-solve-file-not-found-exception/显示如何解决"未找到文件"通过例子例外。基本上,当您遇到上述错误(没有这样的文件或目录);你需要确保在你的情况下指定的"文件:key.p12"是正确的,并指文件本身 你能尝试指定key.p12的整个路径,看看它是怎么回事? 例如:(新文件(" c:/key.p12");)

答案 2 :(得分:0)

您可以使用AssetManager,还可以使用另一个选项将密钥文件放在原始文件夹中并从那里获取。

既然您使用的是Android,我希望这个答案会有所帮助

.\key.p12: open failed: ENOENT (No such file or directory)

祝你有个美好的一天.. :)