Android كيفية الوصول إلى الموارد الخام التي وضعتها في مجلد RES؟

StackOverflow https://stackoverflow.com/questions/2856407

سؤال

في J2ME ، لقد فعلت هذا هكذا:getClass().getResourceAsStream("/raw_resources.dat");

لكن في Android ، أحصل دائمًا على هذا ، لماذا؟

هل كانت مفيدة؟

المحلول

InputStream raw = context.getAssets().open("filename.ext");

Reader is = new BufferedReader(new InputStreamReader(raw, "UTF8"));

نصائح أخرى

بالنسبة للملفات الأولية ، يجب عليك التفكير في إنشاء مجلد RAW داخل دليل RES ثم الاتصال getResources().openRawResource(resourceName) من نشاطك.

في بعض المواقف ، يتعين علينا الحصول على صورة من مجلد Drawable أو RAW باستخدام اسم الصورة بدلاً من ذلك إذا تم إنشاء معرف

// Image View Object 
        mIv = (ImageView) findViewById(R.id.xidIma);
// create context Object for  to Fetch  image from resourse 
Context mContext=getApplicationContext();

// getResources().getIdentifier("image_name","res_folder_name", package_name);

// find out below example 
    int i = mContext.getResources().getIdentifier("ic_launcher","raw", mContext.getPackageName());

// now we will get contsant id for that image       
        mIv.setBackgroundResource(i);
TextView txtvw = (TextView)findViewById(R.id.TextView01);
        txtvw.setText(readTxt());

 private String readTxt()
    {
    InputStream raw = getResources().openRawResource(R.raw.hello);

    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

    int i;
    try
    {
        i = raw.read();
        while (i != -1)
        {
            byteArrayOutputStream.write(i);
            i = raw.read();
        }
        raw.close();
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block

        e.printStackTrace();
    }


    return byteArrayOutputStream.toString();

}

TextView01 :: txtview في LinearLayout Hello :: .txt File في Vers/Raw Volder (يمكنك الوصول إلى مجلد NY othr كـ wel)

خطوط IST 2 مكتوبة بطريقة OnCreate ()

الباقي يجب أن تكون مكتوبًا في النشاط الممتد!

النهج المتقدم هو استخدام Kotlin وظيفة التمديد

fun Context.getRawInput(@RawRes resourceId: Int): InputStream {
    return resources.openRawResource(resourceId)
}

شيء أكثر إثارة للاهتمام هو وظيفة التمديد استعمال تم تعريفه في نطاق قابلة للإغلاق

على سبيل المثال ، يمكنك العمل مع دفق الإدخال بطريقة أنيقة دون التعامل مع الاستثناءات وإدارة الذاكرة

fun Context.readRaw(@RawRes resourceId: Int): String {
    return resources.openRawResource(resourceId).bufferedReader(Charsets.UTF_8).use { it.readText() }
}

inputStream in = getResources (). OpenRawResource (ResourceName) ؛

هذا سوف يعمل بشكل صحيح. قبل ذلك ، يجب عليك إنشاء ملف / ملف نصي XML في مورد RAW. ثم سيكون الوصول إليه.

يحرر
في بعض الأحيان ، سيتم استيراد com.andriod.r إذا كان هناك أي خطأ في ملف التخطيط أو أسماء الصور. لذلك يجب عليك استيراد الحزمة بشكل صحيح ، ثم يمكن الوصول إلى الملف الخام فقط.

getClass().getResourcesAsStream() يعمل بشكل جيد على Android. فقط تأكد من أن الملف الذي تحاول فتحه مضمن بشكل صحيح في APK الخاص بك (افتح APK كـ ZIP).

عادة على Android ، تضع هذه الملفات في assets الدليل. لذلك إذا وضعت raw_resources.dat في ال assets دليل فرعي لمشروعك ، سينتهي به المطاف في assets دليل في APK ويمكنك استخدامه:

getClass().getResourcesAsStream("/assets/raw_resources.dat");

من الممكن أيضًا تخصيص عملية الإنشاء بحيث لا يهبط الملف في assets دليل في APK.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top