java.io.FileNotFoundException:/key.p12:打开失败:enoint(没有这样的文件或目录)

java.io.FileNotFoundException:/key.p12:打开失败:enoint(没有这样的文件或目录),java,android,google-api,google-bigquery,Java,Android,Google Api,Google Bigquery,我正在开发一个应用程序,我正在android应用程序中使用bigquery。我已经在API控制台上创建了一个项目 我已将p12文件放在应用程序的assets文件夹中,并且代码中有正确的路径,但我收到一个错误java.io.FileNotFoundException:/key.p12:open failed:enoint(没有这样的文件或目录) 请帮助我需要做什么改变来解决它 try { credential = new GoogleCredential.Builder()

我正在开发一个应用程序,我正在android应用程序中使用
bigquery
。我已经在API控制台上创建了一个项目

我已将p12文件放在应用程序的assets文件夹中,并且代码中有正确的路径,但我收到一个错误
java.io.FileNotFoundException:/key.p12:open failed:enoint(没有这样的文件或目录)

请帮助我需要做什么改变来解决它

    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();
    }
本教程:通过示例演示如何解决“未找到文件”异常。基本上,当您遇到上述错误时(没有此类文件或目录);您需要确保指定的“file:key.p12在您的情况下”是正确的,并且引用了文件本身。
您能否尝试指定key.p12的整个路径并查看其运行情况? 示例:(新文件(“c:/key.p12”);

本教程:通过示例演示如何解决“未找到文件”异常。基本上,当您遇到上述错误时(没有此类文件或目录);您需要确保指定的“file:key.p12在您的情况下”是正确的,并且引用了文件本身。
您能否尝试指定key.p12的整个路径并查看其运行情况?
例如:(新文件(“c:/key.p12”);

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

    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;
}

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

    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;
}

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

由于您使用的是android,我希望这个答案会有所帮助


祝你有愉快的一天……)

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

由于您使用的是android,我希望这个答案会有所帮助


祝你有愉快的一天……)

您是否被授予在清单文件中的写入权限。似乎您只给出了文件名,而没有根路径。它可能会抛出
FileNotFoundException
。您是如何从p.12创建文件对象的?您是否获得了在清单文件中的写入权限。似乎您只给出了文件名,而没有根路径。它可能会抛出
FileNotFoundException
。您是如何从p.12创建文件对象的?什么是
createFileFromInputStream
?@Williams,我已经添加了它。它将在哪里从输入流创建文件?当我编写此
文件f=新文件(key.p12.)时,您能告诉我它在哪里创建文件吗
?什么是
createFileFromInputStream
?@Williams,我已经添加了它。它将在哪里从输入流创建文件?在我编写此
文件f=新文件(key.p12.)时,您能告诉我它在哪里创建文件吗