اندروید حافظه های متفاوتی برای ذخیره سازی داده های مربوط به برنامه ها ارائه می دهد. این حافظه ها عبارتند از: preference های به اشتراک گذاشته شده، حافظه ی داخلی، حافظه ی خارجی، حافظه ی QLite ، و ذخیره سازی از طریق اتصال به شبکه.

در این فصل قرار است حافظه ی داخلی اندروید را مورد بررسی قرار دهیم. حافظه ی داخلی اندروید ، محل ذخیره سازی داده های شخصی بر روی حافظه ی دستگاه می باشد.این فایل ها به طور پیش فرض شخصی بوده و تنها از طریق برنامه های شما قابل دسترس می باشند و زمانی پاک می شوند که یوزر برنامه ی شما را پاک کرده باشد.

 نوشتن فایل در حافظه ی داخلی اندروید

برای استفاده از حافظه ی داخلی و نوشتن برخی داده ها در فایل، روش openFileOutput() را با نام فایل و سبک مورد نظر فرا بخوانید. سبک آن می تواند شخصی یا همگانی باشد. ترکیب آن در زیر ارائه شده است .

 

FileOutputStream fOut = openFileOutput("file name here",MODE_WORLD_READABLE);

 

روش openFileOutput() نمونه ای از FileOutputStream را گزارش می دهد. بنابراین شما آن را در آبجکت FileInputStream دریافت می کنید. پس از آن می توانید روش نوشتن را برای نوشتن داده روی فایل، فرا بخوانید. ترکیب آن را می توانید ببینید .

 

String str = "data";
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);
}

//string temp contains all the data of the file.
fin.close();

 

علاوه بر این روش های نوشتن، روش های دیگری نیز برای نوشتن بهتر وجود دارند که در گروه FileOutputStream ارائه می شوند، این روش ها در زیر ارائه شده اند.

شماره متد و توضیحات
1 FileOutputStream(File file, boolean append)

یک FileOutputStream جدید می سازد که روی فایل می نویسد.

2 getChannel()

این روش یک write-only FileChannel را گزارش می دهد که موقعیت خود را با این جریان به اشتراک می گذارد.

3 getFD()

این روش فایل توصیف گر اصلی را گزارش می دهد.

4 write(byte[] buffer, int byteOffset, int byteCount)

این روش بایت های count را از بسته بایت بافر می نویسد که از موقعیت افست این جریان را آغاز می کند.

همچنین، روش های بیشتری برای خواندن بهتر فایل ها وجود دارند که توسط گروه FileInputStream ارائه می شوند. لیست این روش ها را می توانید در زیر ببینید.

شماره متد و توضیحات
1 available()

این روش یک تعداد تقریبی از بایت هایی ارائه می دهد که می توانند خوانده شوند و یا بدون بلاک شدن برای داخلی بیشتر، نادیده گرفته شوند.

2 getChannel()

این روش یک read-only FileChannel را گزارش می دهد که موقعیت خود را با این جریان به اشتراک گذاشته است.

3 getFD()

این روش فایل توصیف گر اصلی را گزارش می دهد.

4 read(byte[] buffer, int byteOffset, int byteCount)

این روش بایت هایی با بیشترین طول را در این جریان می خواند وآن ها را با شروع در افست، در ردیف بایت ذخیره می کند.

مثال

در این جا مثالی را می بینید که استفاده از حافظه ی داخلی را برای خواندن و ذخیره ی فایل توضیح می دهد. این مثال یک برنامه ی ذخیره سازی پایه ایجاد می کند که به شما اجازه می دهد تا از حافظه ی داخلی بخوانید و بنویسید.

برای اجرای این مثال به یک دستگاه واقعی یا یک مقلد نیاز دارید.

مرحله  توضیحات
1 برای ایجاد یک برنامه ی اندروید از Android studio IDE  تحت پکیج com.example.storage. استفاده می کنیم .
2 فایل src/MainActivity.java را برای افزودن کد لازم تغییر دهید.
3 res/values/string.xml را برای افزودن مولفه های رشته ی لازم تغییر دهید.
4 res/values/string.xml را برای افزودن مولفه های رشته ی لازم تغییر دهید.
5 برنامه را اجرا کنید، یک دستگاه اجرایی اندروید انتخاب کنید و برنامه را روی آن نصب کرده و نتایج را بررسی کنید.

در زیر محتوای تغییر یافته فایل فعالیت اصلی را مشاهده می کنید.

 

package com.example.sairamkrishna.myapplication;

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

public class MainActivity extends Activity  {
   Button b1,b2;
   TextView tv;
   EditText ed1;

   String data;
   private String file = "mydata";

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      b1=(Button)findViewById(R.id.button);
      b2=(Button)findViewById(R.id.button2);

      ed1=(EditText)findViewById(R.id.editText);
      tv=(TextView)findViewById(R.id.textView2);
      b1.setOnClickListener(new View.OnClickListener() {
         
         @Override
         public void onClick(View v) {
            data=ed1.getText().toString();
            try {
               FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE);
               fOut.write(data.getBytes());
               fOut.close();
               Toast.makeText(getBaseContext(),"file saved",Toast.LENGTH_SHORT).show();
            }
            catch (Exception e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
            }
         }
      });

      b2.setOnClickListener(new View.OnClickListener() {
         
         @Override
         public void onClick(View v) {
            try {
               FileInputStream fin = openFileInput(file);
               int c;
               String temp="";
               while( (c = fin.read()) != -1){
                  temp = temp + Character.toString((char)c);
               }
               tv.setText(temp);
               Toast.makeText(getBaseContext(),"file read",Toast.LENGTH_SHORT).show();
            }
            catch(Exception e){
            }
         }
      });
   }
}

 

در زیر محتوای تغییریافته ی xml فایل res/layout/activity_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:layout_width="match_parent"
   android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
      
   <TextView android:text="Internal storage" android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />
   
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Save"
      android:id="@+id/button"
      android:layout_alignParentBottom="true"
      android:layout_alignLeft="@+id/textView"
      android:layout_alignStart="@+id/textView" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:hint="Enter Text"
      android:focusable="true"
      android:textColorHighlight="#ff7eff15"
      android:textColorHint="#ffff25e6"
      android:layout_below="@+id/imageView"
      android:layout_alignRight="@+id/textView"
      android:layout_alignEnd="@+id/textView"
      android:layout_marginTop="42dp"
      android:layout_alignLeft="@+id/imageView"
      android:layout_alignStart="@+id/imageView" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="load"
      android:id="@+id/button2"
      android:layout_alignTop="@+id/button"
      android:layout_alignRight="@+id/editText"
      android:layout_alignEnd="@+id/editText" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Read"
      android:id="@+id/textView2"
      android:layout_below="@+id/editText"
      android:layout_toLeftOf="@+id/button2"
      android:layout_toStartOf="@+id/button2"
      android:textColor="#ff5bff1f"
      android:textSize="25dp" />
      
</RelativeLayout>

 

در زیر محتوای res/values/string.xml را مشاهده می کنید.

 

<resources>
   <string name="app_name">My Application</string>
</resources>

 

در زیر محتوای فایل AndroidManifest.xml را مشاهده می کنید.

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

 

اجازه بدهید برنامه ی ذخیره سازی خود را اجرا کنیم. فرض می کنیم که در هنگام انجام تنظیمات محیط، AVD خود را ایجاد کرده اید. برای اجرای برنامه از eclipse، یکی از فایل های فعالیت پروژه را باز کنید و روی آیکن RunEclipse Run Icon از تولبار کلیک کنید. Eclipse برنامه را روی AVD شما نصب و آغازمی کند و اگر همه چیز در مورد برنامه و تنظیمات درست باشد، پنجره ی Emulator زیر نمایش داده خواهد شد.

آموزش حافظه ی داخلی اندروید

حال آنچه باید انجام دهید، اضافه کردن متن در فیلد می باشد. به عنوان مثال من متن soem را وارد کرده ام. سپس دکمه ی save را فشار دهید. پیام زیر روی AVD شما نمایش داده خواهد شد.

آموزش حافظه ی داخلی اندروید

حالا وقتی که شما دکمه load را فشار دهید، برنامه فایل شما را خواهد خواند و داده را نمایش خواهد داد. در مورد ما داده ی زیر گزارش داده می شود.

آموزش حافظه ی داخلی اندروید

توجه داشته باشید که شما می توانید این فایل را با تغییر به تب DDMS مشاهده کنید. File explorer را انتخاب کرده و این مسیر را به پیش بروید.

tools>android>android device Monitor

این مسئله نیز دز تصویر زیر نشان داده شده است.

Android Internal Stroage Tutorial