尝试获取资产或原始目录中的文件路径

时间:2014-06-29 17:00:54

标签: android assets

Android Studio 0.8.1

您好,

我使用snapzkeystore.bks创建了一个名为keytool的密钥库。我想获取路径,以便将其传递给函数并加载它。但是,我似乎无法走上正轨。我也尝试将它放在raw和assets文件夹中并尝试按照这种方式进行测试并测试哪些有效,但是,我还得到一个FileNotFoundException调用此函数keyStoreFile.load(fileInputStream, password)(下面的代码)

放入原始文件夹Test 1:

时尝试获取它
String uri = "android.resource://" + getActivity().getPackageName() + "/" + R.raw.snapzkeystore;
snapClient.makeRequest(uri.toString());

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

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

我也尝试过使用assets文件夹并使用它代替Test 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);

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

enter image description here

非常感谢任何建议

1 个答案:

答案 0 :(得分:1)

  

我想获取路径,以便将其传递给函数并加载它。但是,我似乎无法获得路径

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

  

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

这是因为您在toString()返回的InputStream上致电AssetManager

  

用于加载密钥库的源代码段

load()需要InputStream。您不必使用FileInputStream。我们欢迎您将InputStream的{​​{1}}传递给AssetManager

load()
  

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

要么应该没事。您可以使用KeyStore keyStoreFile = KeyStore.getInstance(KeyStore.getDefaultType()); keyStoreFile.load(resources.getAssets().open("snapzkeystore.bks"), password); ,IIRC上的openRawResource()获取原始资源上的Resources