خواندن و نوشتن فایل در اندروید
اندروید انواع مختلف ذخیره سازی را برای برنامه های کاربردی فراهم می کند تا داده های خود را ذخیره کنند. این مکان های ذخیره سازی، تنظیمات مشترک، ذخیره سازی داخلی و خارجی، ذخیره سازی SQLite و ذخیره سازی از طریق اتصال به شبکه هستند.
در این فصل ما به ذخیره سازی داخلی نگاه می کنیم. ذخیره سازی داخلی ذخیره داده های خصوصی در حافظه دستگاه است.به طور پیش فرض این فایل ها خصوصی هستند و فقط توسط برنامه شما قابل دسترسی هستند و زمانی که کاربر برنامه خود را حذف می کنند حذف می شوند.
اگر در داخل برنامه اکلیپس یا اندروید استودیو قرار دارید پروژه جدیدی را ایجاد کنید
اکلیپس :File ⇒ New Android ⇒ Application Project
اندروید استودیو :File ⇒ New ⇒ New Project
اما اگر هنوز برنامه خود را باز نکرده اید یکی از برنامه های فوق را باز نموده و بعد از تعیین مشخصات(نامگذاری) ، تعیین حداقل sdk و نوع اکتیویتی (blank یا Empty) ، نام اکتیویتی ابتدایی و اصلی خود را همان MainActivity قرار دهید. بعد از لود کامل برنامه ، در مسیر res ⇒layout لایه متناظر اکتیوتی اصلی یعنی activity_main را پیدا نمود و کدهای مندرج و پیش فرض آن را پاک کرده و کدهای xml زیر را به آن اضافه کنید:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" 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" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.example.psrd.test.MainActivity" tools:showIn="@layout/activity_main" android:background="#a9a3a3"> <EditText android:layout_width="wrap_content" android:layout_height="100dp" android:id="@+id/editText" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:background="#dfdcdc" android:layout_alignParentTop="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button" android:text="Write to EnternalStorge" android:layout_centerVertical="true" android:layout_alignLeft="@+id/button2" android:layout_alignStart="@+id/button2" android:layout_alignRight="@+id/button2" android:layout_alignEnd="@+id/button2" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:layout_marginTop="41dp" android:text="read and verfiy your writen text" android:layout_below="@+id/button" android:layout_centerHorizontal="true" /> </RelativeLayout>
در لایوت بالا ما EditText با دو button قرار داده ایم. و قرار است کاربر متن خود را در edittext نوشته و با کلیک بر روی هریک از button ها نوع عملیات نوشتن و خواندن فایل انجام شود. همچنین باید توجه کرد که محل فایل نوشته شده در داخل خود پکیج نصب شده در اندروید خواهد بود که از این طریق قابل دسترسی است.
بعد از مشخص کردن اجزای لایوت ، نوبت به نوشتن کدهای MainActivity می رسد. در این کلاس ما ابتدا اجزا و عناصر لایوت را برای کلاس تعریف می کنیم. و سپس بر اساس دو متدی که برای خواندن و نوشتن فایل متنی با عنوان آورده شده است با کلیک بر روی هریک از باتن ها نوع عملیات آنها را مشخص کرده ایم
package com.example.psrd.test; import android.os.Bundle; import android.app.Activity; import android.view.View; import android.widget.Button; 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; private Button btnwrite, btnread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textmsg=(EditText)findViewById(R.id.editText); btnread = (Button)findViewById(R.id.button1); btnwrite = (Button)findViewById(R.id.button); btnwrite.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { WriteBtn(); } }); btnread.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ReadBtn(); } }); } // write text to file public void WriteBtn() { // add-write text into file try { FileOutputStream fileout=openFileOutput("mytextfile.txt", MODE_PRIVATE); OutputStreamWriter outputWriter=new OutputStreamWriter(fileout); outputWriter.write(textmsg.getText().toString()); outputWriter.close(); //display file saved message Toast.makeText(getBaseContext(), "File saved successfully!", Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); } } // Read text from file public void ReadBtn() { //reading text from file 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 to string conversion String readstring=String.copyValueOf(inputBuffer,0,charRead); s +=readstring; } InputRead.close(); textmsg.setText(s); } catch (Exception e) { e.printStackTrace(); } } }
در نهایت به منظور خواندن و نوشتن فایل می بایست مجوزهای لازم را به برنامه تعریف کنیم . بدین منظور کدهای مشخص شده به رنگ قرمز را در AndroidManfest قرار می دهیم.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.psrd.test"> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
حال برنامه را اجرا کرده و در یادگیری هرچه بیشتر از آن بهره بگیرید.
1 دیدگاه
Mahsa · نوامبر 2, 2019 در 10:13 ب.ظ
عالی بود توضیحاتتونم خیلی دقیق بود مرسی