尝试获取ASSET或RAW目录中文件的路径 [英] Trying to get the path for a file in the assets or raw directory

查看:91
本文介绍了尝试获取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目录中文件的路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆