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

Trying to get the path for a file in the assets or raw directory(尝试获取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目录中文件的路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

How to target newer versions in .gitlab-ci.yml using auto devops (java 11 instead of 8 and Android 31 instead of 29)(如何在.gitlab-ci.yml中使用自动开发工具(Java 11而不是8,Android 31而不是29)瞄准较新的版本)
Android + coreLibraryDesugaring: which Java 11 APIs can I expect to work?(Android+core LibraryDesugering:我可以期待哪些Java 11API能够工作?)
How to render something in an if statement React Native(如何在If语句中呈现某些内容Reaction Native)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)
Using Firebase Firestore in offline only mode(在仅脱机模式下使用Firebase FiRestore)
Crash on Google Play Pre-Launch Report: java.lang.NoSuchMethodError(Google Play发布前崩溃报告:java.lang.NoSuchMethodError)