2015-05-20 3 views
7

में फ़ाइल को पाने के लिए, लेकिन मेरी विशेष उपयोग के मामले के लिए मैं एक FileInputStream की जरूरत है। मुझे FileInputStream विशेष रूप से कारण है क्योंकि मुझे getChannel() पर कॉल करके FileChannel ऑब्जेक्ट प्राप्त करने की आवश्यकता है।मुझे कैसे पता चलेगा <code>AssetManager</code> उपयोग करने के लिए कैसे एक <code>InputStream</code> साथ <code>res/raw</code> निर्देशिका में से किसी <code>File</code> पढ़ने के लिए FileInputStream संपत्ति फ़ोल्डर

इस कोड को मैं अब तक राशि है, यह डेटा (मेरे मामले में पुरातन की एक सूची) एक 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 प्राप्त कर सकते हैं है?

+0

मुझे लगता है कि अपने URL परेशानी आप संपत्ति निर्देशिका से जोड़ना चाहिए है। –

+0

तो आपको केवल सरणी सरणी के रूप में फ़ाइल सामग्री को पढ़ने की आवश्यकता है? क्या मैं सही हूँ? – Ayzen

+0

@ आइज़न हां, लेकिन मुझे इसे तेज, विधि बनाने की ज़रूरत है, मैंने 80 के * 4 बाइट्स पढ़े हैं और इसे अपने पीसी –

उत्तर

9

आप इस तरह अपनी संपत्ति में एक संसाधन के लिए एक 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); 
संबंधित मुद्दे