如何将FileInputStream获取到资源文件夹中的文件

我知道如何使用AssetManager读取带有Fileres/raw目录InputStream,但是对于我的特殊用例,我需要一个FileInputStream。我需要一个FileInputStream专门的原因是因为我需要FileChannel通过调用从它获取对象getChannel()

这是我到目前为止的代码,它从中读取数据(在我的情况下为原语列表)File

public static int[] loadByMappedBuffer(Context context, String filename) throws IOException{

FileInputStream fis = context.openFileInput(filename);

FileChannel ch = fis.getChannel();

MappedByteBuffer mbuff = ch.map(MapMode.READ_ONLY, 0, ch.size());

IntBuffer ibuff = mbuff.asIntBuffer();

int[] array = new int[ibuff.limit()];

ibuff.get(array);

fis.close();

ch.close();

return array;

}

我曾尝试通过创建File一个Uri,但这只会导致FileNotFoundException

Uri uri = Uri.parse("android.resource://com.example.empty/raw/file");

File file = new File(uri.getPath());

FileInputStream fis = new FileInputStream(file);

有没有一种方法,我可以得到FileInputStream一个Fileres/raw目录中?

回答:

您可以FileInputStream像这样获取资产中的资源:

AssetFileDescriptor fileDescriptor = assetManager.openFd(fileName);

FileInputStream stream = fileDescriptor.createInputStream();

fileName您提供的openFd() 应该是资产的相对路径,同样fileName你会提供给open()

或者,您也可以这样创建FileInputStream

AssetFileDescriptor assetFileDescriptor = assetManager.openFd(fileName);  

FileDescriptor fileDescriptor = assetFileDescriptor.getFileDescriptor();

FileInputStream stream = new FileInputStream(fileDescriptor);

以上是 如何将FileInputStream获取到资源文件夹中的文件 的全部内容, 来源链接: utcz.com/qa/420334.html

回到顶部