خواندن و نوشتن فایل در اندروید

منتشرشده توسط حامد قنبری در تاریخ

اندروید انواع مختلف ذخیره سازی را برای برنامه های کاربردی فراهم می کند تا داده های خود را ذخیره کنند. این مکان های ذخیره سازی، تنظیمات مشترک، ذخیره سازی داخلی و خارجی، ذخیره سازی 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 ب.ظ

عالی بود توضیحاتتونم خیلی دقیق بود مرسی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --