نوشتن فایل در حافظه داخلی اندروید چگونه است؟ همراه با مثال کاربردی

نوشتن فایل در حافظه داخلی اندروید استودیو - حافظه داخلی در اندروید استودیو | مرجع آموزش برنامه نویسی اندروید الکامکو

در این مقاله می خواهیم شما را با نحوه ی نوشتن فایل در حافظه داخلی اندروید (Internal Storage) در اندروید استودیو همراه با یک مثال پروژه محوری و نکاتی که در این زمینه مهم است آشنا کنیم. پس با مرجع آموزش برنامه نویسی اندروید الکامکو همراه باشید.

انواع حافظه های اندروید : 

قبل از آشنایی با حافظه داخلی در اندروید بهتر است با همه حافظه های اندروید برای ذخیره سازی داده های مربوط به اپلیکیشن ها آشنا شوید. این حافظه ها عبارتند از:

  • preference های به اشتراک گذاشته شده
  • حافظه ی داخلی (internal)
  • حافظه ی خارجی (external storage)
  • حافظه ی QLite
  •  ذخیره سازی از طریق اتصال به شبکه

نحوه کار با حافظه داخلی در اندروید استودیو چگونه است؟ 

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

نکات مهم درباره حافظه Internal اندروید :

  • داده های ذخیره شده در حافظه داخلی اندروید، اجازه خواندن و نوشتن فایل ها را دارند.
  • هنگامی که فایل ها در حافظه داخلی اندروید ذخیره می شوند، فقط توسط خود برنامه قابل دسترسی است و توسط برنامه های دیگر قابل دسترس نیست.
  • این داده ها به طور پیش فرض شخصی بوده و فقط از طریق اپلیکیشن های شما قابل دسترسی می باشند و زمانی پاک می شوند که کاربر دستگاه ، اپلیکیشن را پاک کرده باشد.
  • فایل ها در پوشه ای به نام Data ذخیره می شوند. این پوشه توسط نام پکیج اندروید دنبال می شود.
  • کاربر می تواند به اپلیکیشن ها این اجازه را بدهد که از این فایل ها استفاده کنند.
  • برای خصوصی سازی داده ها می توانید از MODE_PRIVATE استفاده کنید. (در ادامه توضیح داده شده است)
  • تکنیک MODE_PRIVATE زمانی مناسب تر است که داده ها فقط توسط کاربرقابل دسترس باشند و توسط برنامه های دیگر قابل دسترس نباشند.
  • داده ها در فایلی ذخیره می شوند که شامل داده هایی با فرمت بیت (Bit) است، بنابراین لازم است داده ها را قبل از اضافه کردن آن به فایل یا قبل از استخراج از یک فایل تبدیل کنید.

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

  1. MODE_PRIVATE – در حالت خصوصی داده های ذخیره شده قبلی با داده های فعلی جایگزین می شوند. یعنی هر بار که سعی می کنید نوشته جدیدی به فایل اضافه کنید، نوشته قبلی در حافظه داخلی پاک می شود. ما در پایان این مقاله از MODE_PRIVATE در مثال استفاده کرده ایم.
  2. MODE_APPEND – در این حالت داده ها به محتوای موجود اضافه می شوند و داده های قبلی حذف نمی شوند.

نوشتن فایل در حافظه داخلی اندروید چگونه است؟

برای نوشتن فایل در حافظه داخلی اندروید، نام فایل را به عنوان یک رشته تعریف کنید و همچنین داده هایی را که می خواهید بنویسید را به عنوان رشته یا به هر فرمت ایجاد شده از برنامه یا هر منبع دیگر تعریف کنید.

از روش FileOutputStream با ایجاد شیء تعریف شده استفاده کنید.

داده ها را قبل از نوشتن روی پرونده به فرمت بایت (Byte) تبدیل کنید زیرا فایل فقط فرمت بایت را می پذیرد و پرونده را با استفاده از شیء فایل بسته می کند.

String File_Name= "Demo.txt"; //gives file name
String Data="Hello!!"; //define data

FileOutputStream fileobj = openFileOutput( File_Name, Context.MODE_PRIVATE);
byte[] ByteArray = Data.getBytes(); //Converts into bytes stream
fileobj.write(ByteArray); //writing to file
fileobj.close(); //File closed

مثالی از ذخیره سازی داده ها در حافظه داخلی در اندروید استودیو :

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

مرحله ۱- برای شروع پروژه نوشتن فایل در حافظه داخلی اندروید ابتدا یک پروژه جدید ایجاد کنید و نام آن را  InternalStorageDemo بگذارید.

مرحله ۲- اکتیوتی res -> layout -> activity_main.xml (or) main.xml را باز کنید و کد زیر را به آن اضافه کنید.

در این کد،  textview , edittext and button را با قابلیت onclick اضافه کنید.

<?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:id="@+id/activity_main"
    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"
    tools:context="com.example.internalstoragedemo.MainActivity">

    <TextView
        android:text="@string/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="51dp"
        android:layout_marginStart="51dp"
        android:layout_marginTop="59dp"
        android:id="@+id/txtname"
        android:textStyle="bold|italic"
        android:textSize="18sp" />

    <TextView
        android:text="@string/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/txtname"
        android:layout_alignLeft="@+id/txtname"
        android:layout_alignStart="@+id/txtname"
        android:layout_marginTop="56dp"
        android:id="@+id/txtpass"
        android:textStyle="bold|italic"
        android:textSize="18sp" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="8"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/txtpass"
        android:layout_toEndOf="@+id/txtpass"
        android:layout_marginLeft="21dp"
        android:layout_marginStart="21dp"
        android:layout_marginTop="48dp"
        android:id="@+id/editName" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"
        android:layout_below="@+id/editName"
        android:layout_alignLeft="@+id/editName"
        android:layout_alignStart="@+id/editName"
        android:layout_marginTop="35dp"
        android:id="@+id/editPass" />

    <Button
        android:text="@string/save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editPass"
        android:layout_alignLeft="@+id/txtpass"
        android:layout_alignStart="@+id/txtpass"
        android:layout_marginTop="86dp"
        android:id="@+id/button"
        android:onClick="save"/>  // OnClick "save"

    <Button
        android:text="@string/next"
        android:la
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/button"
        android:layout_alignRight="@+id/editName"
        android:layout_alignEnd="@+id/editName"
        android:layout_marginRight="25dp"
        android:layout_marginEnd="25dp"
        android:id="@+id/button2"
        android:onClick="next"/> // OnClick "next"
</RelativeLayout>

مرحله ۳- src -> package -> MainActivity.java را باز کنید.

در این مرحله ما MainActivity را باز می کنیم و توابع تعریف شده بر روی دکمه onclick یعنی save یا Next را اضافه می کنیم. عملکرد ذخیره سازی داده ها را از edittext دریافت می کند و آن را در قالب بایت درون فایل ذخیره می کند. در اینجا ما همچنین از Toast برای نمایش مسیری که فایل با نام فایل ذخیره می شود ، استفاده کردیم. تابع بعدی از intent برای انتقال به فعالیت بعدی مرتبط با آن استفاده می کند.

package com.example.internalstoragedemo;

import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    EditText editname,editpass;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editname = (EditText) findViewById(R.id.editName);
        editpass= (EditText) findViewById(R.id.editPass);
    }

    public void  save(View view)  // SAVE
    {
        File file= null;
        String name = editname.getText().toString();
        String password = editpass.getText().toString();

            FileOutputStream fileOutputStream = null;
            try {
                name = name + " ";
                file = getFilesDir();
                fileOutputStream = openFileOutput("Code.txt", Context.MODE_PRIVATE); //MODE PRIVATE
                fileOutputStream.write(name.getBytes());
                fileOutputStream.write(password.getBytes());
                Toast.makeText(this, "Saved \n" + "Path --" + file + "\tCode.txt", Toast.LENGTH_SHORT).show();
                editname.setText("");
                editpass.setText("");
                return;
            } catch (Exception ex) {
                ex.printStackTrace();
            } finally {
                try {
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    public void  next( View view)   //NEXT
    {
        Toast.makeText(this,"NEXT", Toast.LENGTH_SHORT).show();
        Intent intent= new Intent(this, Main2Activity.class);
        startActivity(intent);

    }
}

مرحله ۴-  res -> layout -> activity_main2.xml (or) main2.xml  را باز کنید و کد زیر را بنویسید:

در این اکتیویتی، Layout کاملاً شبیه به 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:id="@+id/activity_main2"
    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"
    tools:context="com.example.internalstoragedemo.Main2Activity">

    <TextView
        android:text="@string/getname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignRight="@+id/button3"
        android:layout_alignEnd="@+id/button3"
        android:layout_marginRight="11dp"
        android:layout_marginEnd="11dp"
        android:layout_marginTop="76dp"
        android:id="@+id/textView3"
        android:textSize="18sp"
        android:textStyle="bold|italic" />

    <TextView
        android:text="@string/getpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView3"
        android:layout_alignRight="@+id/textView3"
        android:layout_alignEnd="@+id/textView3"
        android:layout_marginTop="33dp"
        android:id="@+id/textView4"
        android:textStyle="bold|italic"
        android:textSize="18sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/textView4"
        android:layout_alignLeft="@+id/button4"
        android:layout_alignStart="@+id/button4"
        android:id="@+id/getname"
        android:textStyle="bold|italic"
        android:textSize="18sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/textView4"
        android:layout_alignLeft="@+id/getname"
        android:layout_alignStart="@+id/getname"
        android:id="@+id/getpass"
        android:textStyle="bold|italic"
        android:textSize="18sp" />

    <Button
        android:text="@string/load"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/button3"
        android:layout_marginLeft="35dp"
        android:layout_marginStart="35dp"
        android:onClick="load"
        android:layout_below="@+id/textView4"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="80dp" />

    <Button
        android:text="@string/back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="54dp"
        android:layout_marginEnd="54dp"
        android:id="@+id/button4"
        android:onClick="back"
        android:layout_alignBaseline="@+id/button3"
        android:layout_alignBottom="@+id/button3"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

</RelativeLayout>

مرحله ۵-  src -> package -> MainActivity2.java را باز کنید:

در این مرحله MainActivity2 را باز می کنیم و توابع تعریف شده بر روی دکمه onclick یعنی load یا Back اضافه می کنیم. عملکرد load داده را از فایل بازیابی می کند، آن را به StringBuffer اضافه می کند و متن را بر روی textview تنظیم می کند. عملکرد Back شامل intent fvhd بازگشت به main activity. است.

package com.example.internalstoragedemo;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import java.io.FileInputStream;

public class Main2Activity extends AppCompatActivity {

    TextView getname, getpass;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        getname = (TextView)findViewById(R.id.getname);
        getpass = (TextView)findViewById(R.id.getpass);
    }
    public void  load(View view)
    {
        try {
           FileInputStream fileInputStream =  openFileInput("Code.txt");
            int read = -1;
            StringBuffer buffer = new StringBuffer();
           while((read =fileInputStream.read())!= -1){
               buffer.append((char)read);
           }
            Log.d("Code", buffer.toString());
            String name = buffer.substring(0,buffer.indexOf(" "));
            String pass = buffer.substring(buffer.indexOf(" ")+1);
            getname.setText(name);
            getpass.setText(pass);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Toast.makeText(this,"Loaded", Toast.LENGTH_SHORT).show();
    }

    public void  back( View view)
    {
        Toast.makeText(this,"Back", Toast.LENGTH_SHORT).show();
        Intent intent= new Intent(this, MainActivity.class);
        startActivity(intent);
    }
}

خروجی پروژه اندروید استودیو این جلسه: 

اکنون اگر برنامه را اجرا کنید، فرم ورود به صفحه را مشاهده خواهید کرد. داده های خواسته شده را در قسمت های مشخص شده اضافه کرده و آن را ذخیره save کنید. سپس بر روی گزینه Next کلیک کنید تا به فعالیت بعدی بروید و داده بارگذاری شده در مرحله قبل Loadشود.

نکته مهم: این فایل فقط درصورتی قابل مشاهده است که اپلیکیشن را با استفاده از شبیه ساز اندروید استودیو (Android Studio) اجرا کنید و با پلتفرم خارجی دیگر این برنامه را اجرا نکنید.

commentشما بگید!

شما چه سوالی درباره این موضوع دارید که اینجا مطرح نشده است؟ لطفا تجربیات خودتان را در این زمینه حتما توی کامنت برای ما بنویسید. منتظر نظرات، پیشنهادات و سوالات شما در همین صفحه از سایت آموزش برنامه نویسی الکامکو هستیم…

shareاشتراک گذاری این مطلب

shareآخرین مقالات

آخرین مقالات

آموزش های تکمیل شده

توجه

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

0 دیدگاه
بازخورد درون خطی
مشاهده همه نظرات
فهرست