هیچ دوره ای در سبد آموزش شما وجود ندارد
حافظه داخلی اندروید
صفحه نخستاندروید حافظه های متفاوتی برای ذخیره سازی داده های مربوط به برنامه ها ارائه می دهد. این حافظه ها عبارتند از: 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، یکی از فایل های فعالیت پروژه را باز کنید و روی آیکن Run از تولبار کلیک کنید. Eclipse برنامه را روی AVD شما نصب و آغازمی کند و اگر همه چیز در مورد برنامه و تنظیمات درست باشد، پنجره ی Emulator زیر نمایش داده خواهد شد.
حال آنچه باید انجام دهید، اضافه کردن متن در فیلد می باشد. به عنوان مثال من متن soem را وارد کرده ام. سپس دکمه ی save را فشار دهید. پیام زیر روی AVD شما نمایش داده خواهد شد.
حالا وقتی که شما دکمه load را فشار دهید، برنامه فایل شما را خواهد خواند و داده را نمایش خواهد داد. در مورد ما داده ی زیر گزارش داده می شود.
توجه داشته باشید که شما می توانید این فایل را با تغییر به تب DDMS مشاهده کنید. File explorer را انتخاب کرده و این مسیر را به پیش بروید.
tools>android>android device Monitor
این مسئله نیز دز تصویر زیر نشان داده شده است.