java.io.FileNotFoundException:/key.p12:打开失败:ENOENT(没有那个文件或目录)
java.io.FileNotFoundException: /key.p12: open failed: ENOENT (No such file or directory)
我正在开发应用程序,其中我在 android 应用程序中使用 bigquery
。我在 API 控制台上创建了一个项目。
我已将 p12 文件放在应用程序的资产文件夹中,并且在代码中有正确的路径,但我收到错误 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();
}
本教程:http://examples.javacodegeeks.com/java-basics/exceptions/java-io-filenotfoundexception-how-to-solve-file-not-found-exception/ 通过示例展示了如何解决 "File Not Found" 异常。基本上,当您遇到上述错误时(没有这样的文件或目录);您将需要确保指定的 "file: key.p12 in your case" 是正确的并且指的是文件本身。
您可以尝试指定 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;
}
您可以使用 AssetManager,也可以选择将密钥文件放在原始文件夹中并从那里获取。
既然您正在使用 android,希望这个回答对您有所帮助
祝你有美好的一天..:)
我正在开发应用程序,其中我在 android 应用程序中使用 bigquery
。我在 API 控制台上创建了一个项目。
我已将 p12 文件放在应用程序的资产文件夹中,并且在代码中有正确的路径,但我收到错误 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();
}
本教程:http://examples.javacodegeeks.com/java-basics/exceptions/java-io-filenotfoundexception-how-to-solve-file-not-found-exception/ 通过示例展示了如何解决 "File Not Found" 异常。基本上,当您遇到上述错误时(没有这样的文件或目录);您将需要确保指定的 "file: key.p12 in your case" 是正确的并且指的是文件本身。
您可以尝试指定 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;
}
您可以使用 AssetManager,也可以选择将密钥文件放在原始文件夹中并从那里获取。
既然您正在使用 android,希望这个回答对您有所帮助
祝你有美好的一天..:)