دليل مثال تعليمي لتخزين Android الداخلي

اليوم سنتطلع على تخزين البيانات الداخلي في نظام الأندرويد. يقدم الأندرويد بعض الطرق المنظمة لتخزين البيانات. وتشمل ذلك

في هذا البرنامج التعليمي، سنتناول حفظ البيانات في ملفات وقراءتها باستخدام التخزين الداخلي في نظام الأندرويد.

التخزين الداخلي في نظام الأندرويد

التخزين الداخلي في نظام الأندرويد هو تخزين البيانات الخاصة في ذاكرة الجهاز. عندما تحفظ وتحمل الملفات في التخزين الداخلي، فإن ذلك سيكون خاصًا بالتطبيق ولن يكون لتطبيقات أخرى الوصول إلى هذه الملفات. عندما يقوم المستخدم بإلغاء تثبيت التطبيقات، يتم أيضًا إزالة الملفات المخزنة داخليًا والمرتبطة بالتطبيق. ومع ذلك، يجب ملاحظة أن بعض المستخدمين يقومون بعمل روتلهواتفهم الأندرويد، وبالتالي يحصلون على صلاحيات مستخدم رئيسية، وهؤلاء المستخدمين سيكون بإمكانهم قراءة وكتابة أي ملفات يرغبون فيها.

قراءة وكتابة ملف نصي في تخزين Android الداخلي

تقدم Android openFileInput و openFileOutput من فئات Java I/O لتعديل تيارات القراءة والكتابة من وإلى الملفات المحلية.

  • openFileOutput(): يُستخدم هذا الأسلوب لإنشاء وحفظ ملف. يتم توضيح بناء الجملة له فيما يلي:

    FileOutputStream fOut = openFileOutput("اسم الملف",Context.MODE_PRIVATE);
    

    يُرجع الأسلوب openFileOutput() مثيلًا من FileOutputStream. بعد ذلك يمكننا استدعاء طريقة الكتابة لكتابة البيانات على الملف. يتم توضيح بناء الجملة له فيما يلي:

    String str = "بيانات الاختبار";
    fOut.write(str.getBytes());
    fOut.close();
    
  • openFileInput(): تُستخدم هذه الطريقة لفتح ملف وقراءته. تُرجع مثيلًا لـ FileInputStream. يتم توضيح بناء جملتها أدناه:

    FileInputStream fin = openFileInput(file);
    

    بعد ذلك، نقوم باستدعاء طريقة القراءة لقراءة حرف واحد في كل مرة من الملف ومن ثم طباعته. يتم توضيح بناء جملتها أدناه:

    int c;
    String temp="";
    while( (c = fin.read()) != -1){
       temp = temp + Character.toString((char)c);
    }
    
    fin.close();
    

    في الكود أعلاه، يحتوي السلسلة temp على جميع بيانات الملف.

  • يرجى ملاحظة أن هذه الطرق لا تقبل مسارات الملفات (على سبيل المثال، path/to/file.txt)، بل تأخذ فقط أسماء ملفات بسيطة.

بنية مشروع التخزين الداخلي في Android

شيفرة مثال لتخزين البيانات داخل تطبيق Android

تحتوي تخطيط XML على عنصر EditText لكتابة البيانات إلى الملف، وزرين للكتابة والقراءة. يرجى مراعاة أن طرق onClick معرفة في الملف XML كما هو موضح أدناه: activity_main.xml

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:padding="5dp"
        android:text="Android Read and Write Text from/to a File"
        android:textStyle="bold"
        android:textSize="28sp" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="22dp"
        android:minLines="5"
        android:layout_margin="5dp">

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Write Text into File"
        android:onClick="WriteBtn"
        android:layout_alignTop="@+id/button2"
        android:layout_alignRight="@+id/editText1"
        android:layout_alignEnd="@+id/editText1" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Read Text From file"
        android:onClick="ReadBtn"
        android:layout_centerVertical="true"
        android:layout_alignLeft="@+id/editText1"
        android:layout_alignStart="@+id/editText1" />

</RelativeLayout>

تحتوي الفصل MainActivity على تنفيذ الكتابة والقراءة من الملفات كما شُرح أعلاه.

package com.journaldev.internalstorage;


import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class MainActivity extends Activity {

    EditText textmsg;
    static final int READ_BLOCK_SIZE = 100;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textmsg=(EditText)findViewById(R.id.editText1);
    }

    // كتابة نص إلى ملف
    public void WriteBtn(View v) {
        // إضافة وكتابة النص إلى الملف
        try {
            FileOutputStream fileout=openFileOutput("mytextfile.txt", MODE_PRIVATE);
            OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
            outputWriter.write(textmsg.getText().toString());
            outputWriter.close();

            // عرض رسالة حفظ الملف
            Toast.makeText(getBaseContext(), "File saved successfully!",
                    Toast.LENGTH_SHORT).show();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // قراءة النص من الملف
    public void ReadBtn(View v) {
        // قراءة النص من الملف
        try {
            FileInputStream fileIn=openFileInput("mytextfile.txt");
            InputStreamReader InputRead= new InputStreamReader(fileIn);

            char[] inputBuffer= new char[READ_BLOCK_SIZE];
            String s="";
            int charRead;

            while ((charRead=InputRead.read(inputBuffer))>0) {
                // تحويل char إلى string
                String readstring=String.copyValueOf(inputBuffer,0,charRead);
                s +=readstring;
            }
            InputRead.close();
            textmsg.setText(s);
            

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

هنا، يظهر إعلان عندما يتم كتابة البيانات بنجاح في التخزين الداخلي، ويتم عرض البيانات في الـ EditText نفسه عند قراءة البيانات من الملف. الصورة أدناه توضح نتيجة المشروع، حيث تظهر كتابة النصوص إلى التخزين الداخلي وعند النقر على زر “قراءة”، يتم عرض النص مرة أخرى في نفس الـ EditText.

أين يوجد الملف؟

لعرض الملف بالفعل، افتح مراقب جهاز Android من الأدوات -> Android -> مراقب جهاز Android. يتواجد الملف في المجلد data -> data -> {اسم الحزمة} -> ملفات كما هو موضح في الصور أدناه: الملف “mytextfile.txt” يوجد في اسم الحزمة للمشروع أي com.journaldev.internalstorage كما هو موضح أدناه: قم بتنزيل المشروع النهائي لمثال تخزين Android الداخلي من الرابط أدناه.

قم بتنزيل مشروع مثال تخزين Android الداخلي

Source:
https://www.digitalocean.com/community/tutorials/android-internal-storage-example-tutorial