尝试获取ASSET或RAW目录中文件的路径

本教程将介绍尝试获取ASSET或RAW目录中文件的路径的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

问题描述

Android Studio 0.8.1

您好,

我使用keytool创建了一个名为snapzkeystore.bks的密钥库。我想要获取路径,这样我就可以将其传递给函数并加载它。然而,我似乎无法理解这条路。我也尝试过将其放在RAW和Assets文件夹中,并尝试以这种方式获取它并测试它的工作方式,然而,我也得到了调用此函数的FileNotFoundExceptionkeyStoreFile.load(fileInputStream, password)(以下代码)

将其放入原始文件夹时正在尝试获取测试1:

String uri = "android.resource://" + getActivity().getPackageName() + "/" + R.raw.snapzkeystore;
snapClient.makeRequest(uri.toString());

我得到了FileNotFoundException异常,并且字符串包含:

android.resource://com.sunsystem.snapzui/2131034112

我还尝试使用Assets文件夹,而不是使用测试2:

Resources resources = getResources();
InputStream inputStream;
try {
 inputStream = resources.getAssets().open("snapzkeystore.bks");
 byte[] buffer = new byte[inputStream.available()];
 inputStream.read(buffer);
 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
 byteArrayOutputStream.write(buffer);
 byteArrayOutputStream.close();
 inputStream.close();
 Log.d(TAG, "asset: " + inputStream.toString());
 snapClient.makeRequest(inputStream.toString());
} catch (IOException e) {
 Log.d(TAG, "IOException: " + e.getMessage());
}

我得到了FileNotFoundException异常,并且字符串包含:

android.content.res.AssetManager$AssetInputStream@5363f738

加载密钥库的源代码段:

public int makeRequest(String keyStoreFileName) {
 try {
  KeyStore keyStoreFile = KeyStore.getInstance(KeyStore.getDefaultType()); 
  FileInputStream fileInputStream = new FileInputStream(keyStoreFileName);
  // FileNotFoundException
  keyStoreFile.load(fileInputStream, password);

只是一个简单的问题,放置密钥库的最佳文件夹是raw还是assets

非常感谢您的建议

推荐答案

我希望获得路径,以便可以将其传递给函数并加载它。但是,我似乎找不到路径

这是因为没有路径。这些不是文件。它们是APK文件中的条目。

我得到FileNotFoundException异常,并且字符串包含:android.content.res.AssetManager$AssetInputStream@5363f738

这是因为您对从AssetManager返回的InputStream调用了toString()

加载密钥库的源代码段

load()InputStream。您不必使用FileInputStream。欢迎请问从AssetManager获得的InputStream传递给load()

KeyStore keyStoreFile = KeyStore.getInstance(KeyStore.getDefaultType());
keyStoreFile.load(resources.getAssets().open("snapzkeystore.bks"), password);

只是一个简单的问题,放置密钥库的最佳文件夹是原始文件夹还是资产文件夹?

任何一个都应该很好。您可以在Resources上使用openRawResource(),以获取原始资源上的InputStream

好了关于尝试获取ASSET或RAW目录中文件的路径的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。

0
没有账号?注册  忘记密码?