Android كيفية الوصول إلى الموارد الخام التي وضعتها في مجلد RES؟
-
27-09-2019 - |
سؤال
في 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.