شرح Internal Storage في الاندرويد

برنامج تعليمي للتخزين الداخلي Internal Storage في Android Studio مع مثال

في هذا البرنامج التعليمي سوف نتعرف على التخزين الداخلي Internal Storage للبيانات / الملفات في تطبيق Android باستخدام مثال أو يمكنك ذكر الذاكرة الأساسية لهاتفك. من المهم أيضًا ملاحظة أن البيانات مخزنة في ملف يحدده المستخدم ولكن لا يمكن للمستخدم الوصول إلى هذا الملف ، كما لا يمكن الوصول إلى هذا الملف إلا بواسطة التطبيق نفسه.
شرح التخزين الداخلي في Android Studio

نقاط مهمة حول التخزين الداخليInternal Storage في Android 

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

طرق التخزين الداخلي Internal Storage

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


كتابة البيانات إلى ملف في وحدة التخزين الداخلية:

  • حدد اسم الملف كسلسلة وحدد أيضًا البيانات التي تريد كتابتها في الملف كسلسلة أو بأي تنسيق تم إنشاؤه من التطبيق أو أي مصدر آخر.
  • استخدم طريقة FileOutputStream من خلال إنشاء الكائن الخاص به كما هو محدد.
  • قم بتحويل البيانات إلى دفق بايت قبل الكتابة فوق الملف لأن الملف يقبل تنسيق البايت فقط ثم أغلق الملف باستخدام كائن الملف.
String File_Name= "Demo.txt"; //gives file name
  String Data="Hello!!"; //define data

  FileOutputStream fileobj = openFileOutput( File_Name, Context.MODE_PRIVATE);
  byte[] ByteArray = Data.getBytes(); //Converts into bytes stream
  fileobj.write(ByteArray); //writing to file
  fileobj.close(); //File closed

مثال على التخزين الداخلي Internal Storage في Android Studio

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

كود التحميل

مثال على تخزين البيانات الداخلية في Android Studio
الخطوة 1: قم بإنشاء مشروع جديد وقم بتسميته InternalStorageDemo .
الخطوة 2: افتح res -> layout -> activity_main.xml (أو) main.xml وأضف الكود التالي:
في هذا الكود ، قم ببساطة بإضافة textview و edittext والزر مع وظيفة onclick.

<?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/activity_main"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context="com.example.internalstoragedemo.MainActivity">

  <TextView
  android:text="@string/name"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentTop="true"
  android:layout_alignParentLeft="true"
  android:layout_alignParentStart="true"
  android:layout_marginLeft="51dp"
  android:layout_marginStart="51dp"
  android:layout_marginTop="59dp"
  android:id="@+id/txtname"
  android:textStyle="bold|italic"
  android:textSize="18sp" />

  <TextView
  android:text="@string/password"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_below="@+id/txtname"
  android:layout_alignLeft="@+id/txtname"
  android:layout_alignStart="@+id/txtname"
  android:layout_marginTop="56dp"
  android:id="@+id/txtpass"
  android:textStyle="bold|italic"
  android:textSize="18sp" />

  <EditText
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:inputType="textPersonName"
  android:ems="8"
  android:layout_alignParentTop="true"
  android:layout_toRightOf="@+id/txtpass"
  android:layout_toEndOf="@+id/txtpass"
  android:layout_marginLeft="21dp"
  android:layout_marginStart="21dp"
  android:layout_marginTop="48dp"
  android:id="@+id/editName" />

  <EditText
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:inputType="textPassword"
  android:ems="10"
  android:layout_below="@+id/editName"
  android:layout_alignLeft="@+id/editName"
  android:layout_alignStart="@+id/editName"
  android:layout_marginTop="35dp"
  android:id="@+id/editPass" />

  <Button
  android:text="@string/save"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_below="@+id/editPass"
  android:layout_alignLeft="@+id/txtpass"
  android:layout_alignStart="@+id/txtpass"
  android:layout_marginTop="86dp"
  android:id="@+id/button"
  android:onClick="save"/>  // OnClick "save"

  <Button
  android:text="@string/next"
  android:la
  android:layout_height="wrap_content"
  android:layout_alignTop="@+id/button"
  android:layout_alignRight="@+id/editName"
  android:layout_alignEnd="@+id/editName"
  android:layout_marginRight="25dp"
  android:layout_marginEnd="25dp"
  android:id="@+id/button2"
  android:onClick="next"/> // OnClick "next"
  </RelativeLayout>

الخطوة 3: افتح src -> package -> MainActivity.java

في هذه الخطوة ، نفتح MainActivity ونضيف الوظائف المحددة على الزر عند النقر على الزر "حفظ" أو "التالي". تحصل وظيفة الحفظ على البيانات من edittext وحفظها بتنسيق بايت داخل الملف. استخدمنا هنا أيضًا Toast لعرض المسار حيث يتم تخزين الملف باسم الملف. تستخدم الوظيفة التالية النية للانتقال إلى النشاط التالي المرتبط بها.

package com.example.internalstoragedemo;

  import android.content.Context;
  import android.content.Intent;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.EditText;
  import android.widget.Toast;
  import java.io.File;
  import java.io.FileOutputStream;
  import java.io.IOException;

  public class MainActivity extends AppCompatActivity {
  EditText editname,editpass;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  editname = (EditText) findViewById(R.id.editName);
  editpass= (EditText) findViewById(R.id.editPass);
  }

  public void  save(View view)  // SAVE
  {
  File file= null;
  String name = editname.getText().toString();
  String password = editpass.getText().toString();

  FileOutputStream fileOutputStream = null;
  try {
  name = name + " ";
  file = getFilesDir();
  fileOutputStream = openFileOutput("Code.txt", Context.MODE_PRIVATE); //MODE PRIVATE
  fileOutputStream.write(name.getBytes());
  fileOutputStream.write(password.getBytes());
  Toast.makeText(this, "Saved \n" + "Path --" + file + "\tCode.txt", Toast.LENGTH_SHORT).show();
  editname.setText("");
  editpass.setText("");
  return;
  } catch (Exception ex) {
  ex.printStackTrace();
  } finally {
  try {
  fileOutputStream.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  }

  public void  next( View view)   //NEXT
  {
  Toast.makeText(this,"NEXT", Toast.LENGTH_SHORT).show();
  Intent intent= new Intent(this, Main2Activity.class);
  startActivity(intent);

  }
  }

الخطوة 4 : افتح res -> layout -> activity_main2.xml (أو) main2.xml وأضف الكود التالي:

في هذا النشاط ، يتشابه التخطيط مع main.xml.

<?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/activity_main2"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context="com.example.internalstoragedemo.Main2Activity">

  <TextView
  android:text="@string/getname"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentTop="true"
  android:layout_alignRight="@+id/button3"
  android:layout_alignEnd="@+id/button3"
  android:layout_marginRight="11dp"
  android:layout_marginEnd="11dp"
  android:layout_marginTop="76dp"
  android:id="@+id/textView3"
  android:textSize="18sp"
  android:textStyle="bold|italic" />

  <TextView
  android:text="@string/getpassword"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_below="@+id/textView3"
  android:layout_alignRight="@+id/textView3"
  android:layout_alignEnd="@+id/textView3"
  android:layout_marginTop="33dp"
  android:id="@+id/textView4"
  android:textStyle="bold|italic"
  android:textSize="18sp" />

  <TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_above="@+id/textView4"
  android:layout_alignLeft="@+id/button4"
  android:layout_alignStart="@+id/button4"
  android:id="@+id/getname"
  android:textStyle="bold|italic"
  android:textSize="18sp" />

  <TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignBottom="@+id/textView4"
  android:layout_alignLeft="@+id/getname"
  android:layout_alignStart="@+id/getname"
  android:id="@+id/getpass"
  android:textStyle="bold|italic"
  android:textSize="18sp" />

  <Button
  android:text="@string/load"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@+id/button3"
  android:layout_marginLeft="35dp"
  android:layout_marginStart="35dp"
  android:onClick="load"
  android:layout_below="@+id/textView4"
  android:layout_alignParentLeft="true"
  android:layout_alignParentStart="true"
  android:layout_marginTop="80dp" />

  <Button
  android:text="@string/back"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginRight="54dp"
  android:layout_marginEnd="54dp"
  android:id="@+id/button4"
  android:onClick="back"
  android:layout_alignBaseline="@+id/button3"
  android:layout_alignBottom="@+id/button3"
  android:layout_alignParentRight="true"
  android:layout_alignParentEnd="true" />

  </RelativeLayout>

الخطوة 5: افتح src -> package -> MainActivity2.java

في هذه الخطوة ، نفتح MainActivity2 ونضيف الوظائف المحددة عبر النقر على الزر ، أي التحميل أو الخلف. تقوم وظيفة التحميل باسترداد البيانات من الملف وإضافتها إلى StringBuffer وتعيين النص على طريقة عرض النص. تحتوي وظيفة الرجوع على نية للعودة إلى النشاط الرئيسي.

package com.example.internalstoragedemo;

  import android.content.Intent;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;
  import android.util.Log;
  import android.view.View;
  import android.widget.TextView;
  import android.widget.Toast;
  import java.io.FileInputStream;

  public class Main2Activity extends AppCompatActivity {

  TextView getname, getpass;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main2);
  getname = (TextView)findViewById(R.id.getname);
  getpass = (TextView)findViewById(R.id.getpass);
  }
  public void  load(View view)
  {
  try {
  FileInputStream fileInputStream =  openFileInput("Code.txt");
  int read = -1;
  StringBuffer buffer = new StringBuffer();
  while((read =fileInputStream.read())!= -1){
  buffer.append((char)read);
  }
  Log.d("Code", buffer.toString());
  String name = buffer.substring(0,buffer.indexOf(" "));
  String pass = buffer.substring(buffer.indexOf(" ")+1);
  getname.setText(name);
  getpass.setText(pass);
  } catch (Exception e) {
  e.printStackTrace();
  }
  Toast.makeText(this,"Loaded", Toast.LENGTH_SHORT).show();
  }

  public void  back( View view)
  {
  Toast.makeText(this,"Back", Toast.LENGTH_SHORT).show();
  Intent intent= new Intent(this, MainActivity.class);
  startActivity(intent);
  }
  }

الإخراج :

الآن قم بتشغيل التطبيق وسترى نموذج تسجيل الدخول على الشاشة. أضف البيانات في الحقول واحفظها. انقر بعد ذلك على "التالي" للانتقال إلى النشاط التالي وتحميل البيانات التي تم حفظها من قبل.

نصيحة إضافية

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

ملاحظة مهمة: سيكون الملف قابلاً للعرض فقط إذا قمت بتشغيل التطبيق باستخدام محاكي Android Studio وليس في genymotion أو أي محاكي بديل خارجي آخر.

  • انتقل إلى الأدوات -> Android -> Android Device Monitor وافتح Android Device Monitor .
  • حدد العملية ، على سبيل المثال ، Internalstoragedemo ، حدد File Explorer Find data / data / [package_name] / files / [file.txt]
    مراقب جهاز Android في android Studio
  • في مثال معين ، تكون البيانات / data / com.example.internalstoragedemo / files / Code.txt.
    مسار الملف في مراقب جهاز Android