سبد (0)

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

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

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

در این آموزش قرار است حافظه ی داخلی را مورد بررسی قرار دهیم. حافظه ی داخلی محل ذخیره سازی داده های شخصی بر روی حافظه ی دستگاه می باشد.

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

نوشتن فایل

برای استفاده از حافظه ی داخلی و نوشتن برخی داده ها در فایل، متد 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ارائه می شوند، این متدها در زیر ارائه شده اند

  • FileOutputStream(File file, boolean append)

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

  • getChannel()

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

  • getFD()

    این متد فایل توصیف گر اصلی را بر میگرداند.

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

    این متد count byte های  را از byte array buffer را از مکان انحراف این جریان آغاز می کند.

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

  • available()

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

  • getChannel()

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

  • getFD()

    این متدفایل توصیف گر اصلی را بر میگرداند.

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

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

مثال

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

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

  • برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان  InternalStorage به عنوان بسته ی com.PRG.InternalStorage. نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDKو Compile With در آخرین ورژن Android SDKهستند تا از سطوح بالاتر API استفاده کنید.

  • فایل src/MainActivity.java را برای افزودن کد لازم تغییر دهید.

  • res/layout/activity_main را برای افزودن مولفه های XML مربوطه تغییر دهید.

  • برنامه را اجرا کنید، یک دستگاه اجرایی اندروید انتخاب کنید و برنامه را روی آن نصب کرده و نتایج را بررسی کنید.

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


package com.PRG.InternalStorage;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
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){
            }
         }
      });
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }
   
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.
      
      int id = item.getItemId();
      
      //noinspection SimplifiableIfStatement
      if (id == R.id.action_settings) {
         return true;
      }
      return super.onOptionsItemSelected(item);
   }
}

در زیر محتوای تغییریافته ی xml فایل res/layout/activity_main.xmlرا مشاهده می کنید.

 

<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>
   <string name="hello_world">Hello world!</string>
   <string name="action_settings">Settings</string>
</resources>

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

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.PRG.InternalStorage" >
   <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، یکی از فایل های فعالیت پروژه را باز کنید و روی آیکن Run  از تولبار کلیک کنید. Eclipse برنامه را روی AVD شما نصب و آغازمی کند و اگر همه چیز در مورد برنامه و تنظیمات درست باشد، پنجره ی Emulator زیر نمایش داده خواهد شد.

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

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

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه