java.io.FileNotFoundException:/key.p12:打开失败:enoint(没有这样的文件或目录)
我正在开发一个应用程序,我正在android应用程序中使用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()
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.)时,您能告诉我它在哪里创建文件吗代码>?