如何将FileInputStream获取到资源文件夹中的文件
问题内容:
我知道如何使用AssetManager
读取带有File
的res/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
一个File
在res/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);