[英]Access file in assets folder via fileinputstream(string fileName) in android app
[英]How to get FileInputStream to File in assets folder
我知道如何使用AssetManager
通過InputStream
從res/raw
目錄中讀取File
,但對於我的特殊用例,我需要一個FileInputStream
。 我特別需要FileInputStream
的原因是因為我需要通過調用getChannel()
從中獲取FileChannel
對象。
這是我到目前為止的代碼,它讀取數據(在我的情況的圖元的列表)從一個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;
}
我曾嘗試從Uri
創建File
,但這只會導致FileNotFoundException
:
Uri uri = Uri.parse("android.resource://com.example.empty/raw/file");
File file = new File(uri.getPath());
FileInputStream fis = new FileInputStream(file);
有沒有辦法讓我可以在res/raw
目錄下的File
中獲取FileInputStream
?
您可以將FileInputStream
獲取到資源中的資源,如下所示:
AssetFileDescriptor fileDescriptor = assetManager.openFd(fileName);
FileInputStream stream = fileDescriptor.createInputStream();
您提供給openFd()
的fileName
應該是資產的相對路徑,與open()
提供的fileName
相同。
或者你也可以像這樣創建FileInputStream
:
AssetFileDescriptor assetFileDescriptor = assetManager.openFd(fileName);
FileDescriptor fileDescriptor = assetFileDescriptor.getFileDescriptor();
FileInputStream stream = new FileInputStream(fileDescriptor);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.