I know how to use the AssetManager
to read a File
from the res/raw
directory with an InputStream
, but for my special use case I need a FileInputStream
. The reason I need a FileInputStream
specifically is because I need to get the FileChannel
object from it by calling getChannel()
.
This is the code I have so far, it reads the data (in my case a list of primitives) from a 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;
}
I had tried to create File
from an Uri
, but that just results in a FileNotFoundException
:
Uri uri = Uri.parse("android.resource://com.example.empty/raw/file");
File file = new File(uri.getPath());
FileInputStream fis = new FileInputStream(file);
Is there a way I can get a FileInputStream
to a File
in the res/raw
directory?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…