2015-05-20 10 views
7

yılında Dosya almak için, ama benim özel kullanım durumu için bir FileInputStream lazım. Özellikle FileInputStream'a gereksinim duymamın nedeni, getChannel() numaralı telefonu arayarak FileChannel nesnesini almamdır.nasıl bir <code>InputStream</code> ile <code>res/raw</code> dizinden bir <code>File</code> okumak için <code>AssetManager</code> kullanmayı biliyor FileInputStream varlıkları klasöründe

Bu defa var koddur, bir File den (benim durumumda ilkel bir listesini) verileri okur:

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; 
} 

Bir Uri den File yaratmaya çalışmışlardır, ama bu sadece bir FileNotFoundException sonuçları:

Uri uri = Uri.parse("android.resource://com.example.empty/raw/file"); 
File file = new File(uri.getPath()); 
FileInputStream fis = new FileInputStream(file); 

ben res/raw dizininde bir FileInputStreamFile bir alabilirsiniz bir yolu var mı?

+0

Ben senin URL varlıklar dizinden eklemek gerekir problem.And olduğunu düşünüyorum. –

+0

Yani tek ihtiyacınız olan dosya içeriğini int dizisi olarak okumak mı? Doğrumuyum? – Ayzen

+0

@Ayzen evet, ama hızlı, yöntem, 80K * 4 bayt okur ve int dizisine benim PC –

cevap

9

Böyle senin varlıklarda bir kaynağa bir FileInputStream alabilirsiniz:

AssetFileDescriptor fileDescriptor = assetManager.openFd(fileName); 
FileInputStream stream = fileDescriptor.createInputStream(); 

fileName Eğer varlığın göreli yolu, sen open() arz ediyorum aynı fileName olmalıdır openFd() kaynağı.

Alternatif olarak böyle FileInputStream oluşturabilirsiniz:

AssetFileDescriptor assetFileDescriptor = assetManager.openFd(fileName); 
FileDescriptor fileDescriptor = assetFileDescriptor.getFileDescriptor(); 
FileInputStream stream = new FileInputStream(fileDescriptor); 
İlgili konular