簡體   English   中英

如何在資源文件夾中獲取FileInputStream到File

[英]How to get FileInputStream to File in assets folder

我知道如何使用AssetManager通過InputStreamres/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM