حافظه داخلی یا Internal storage - در برنامه نویسی اندروید

اندروید انواع مختلفی از فضای ذخیره سازی را برای برنامه ها فراهم می کند تا داده های خود را ذخیره سازی کنند. این مکان‌های ذخیره‌سازی shared preferences، حافظه داخلی و خارجی، پایگاه داده SQLite و ذخیره‌سازی از طریق اتصال شبکه هستند. در این آموزش به بررسی حافظه داخلی می پردازیم. حافظه داخلی امکان ذخیره سازی داده های خصوصی در حافظه دستگاه را برای برنامه ها فراهم میکند.

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

نوشتن درون یک فایل یا ذخیره در حافظه داخلی

به منظور استفاده از حافظه داخلی برای نوشتن برخی از داده ها درون یک فایل، متد openFileOutput() فراخوانی میکنیم. در این متد ما نام فایل و mode آن را مشخص میکنیم. این حالت می تواند خصوصی، عمومی و غیره باشد. به کد های زیر دقت کنید :

FileOutputStream fOut = openFileOutput("file name here",MODE_WORLD_READABLE);

متد openFileOutput() نمونه ای از آبجکت FileOutputStream را برمی گرداند. به این ترتیب شما یک نمونه از این کلاس را دارید و با استفاده از آن می توانید اقدام به نوشتن درون فایل مشخص شده بکنید. به کد های نمونه زیر دقت کنید :

String str = "7cloner.com";
fOut.write(str.getBytes());
fOut.close();

خواندن اطلاعات درون یک فایل

برای خواندن اطلاعات از فایلی که ایجاد کرده اید، متد openFileInput() را باید فراخوانی کنید که نام فایل را به عنوان پارامتر ورودی باید به آن بدهید. این متد یک نمونه از کلاس FileInputStream را برمی گرداند. به کدهای زیر دقت کنید :

FileInputStream fin = openFileInput(file);

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

int c;
String temp="";
while( (c = fin.read()) != -1){
   temp = temp + Character.toString((char)c);
}

//رشته temp شامل تمام داده های فایل است.
fin.close();

متدهای کلاس FileOutputStream

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

متد و توضیحات ردیف
FileOutputStream(File file, boolean append)

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

1
getChannel()

این متد یک نمونه از کلاس FileChannel فقط قابل نوشتن را برمی گرداند که موقعیت خود را درون stream به اشتراک می گذارد.

2
getFD()

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

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

این متد تعداد byteهای درون آرایه byte بافر را از موقعیتی که در offset مشخص میکنید درون این stream قرار میدهد.

4

متد های کلاس FileInputStream

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

متد و توضیحات ردیف
available()

این متد تعداد تخمینی بایت‌هایی را برمی‌گرداند که می‌توان آن‌ها را بدون مسدود کردن برای ورودی بیشتر خواند یا رد کرد.

1
getChannel()

این متد یک نمونه از کلاس FileChannel فقط قابل نوشتن را برمی گرداند که موقعیت خود را درون stream به اشتراک می گذارد.

2
getFD()

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

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

این متد تعداد byteهای درون آرایه byte بافر را از موقعیتی که در offset مشخص میکنید از این stream می خواند.

4

مثال

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

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

توضیحات مرحله
ابتدا یک پروژه جدید در اندروید استودیو با یک پکیج دلخواه ایجاد کنید. 1
کدهای درون فایل MainActivity.class را مطابق کدهای که در پایین آورده ایم تغییر بدهید. 2
کدهای درون فایل activity_main.xml را مطابق کدهای که در پایین آورده ایم تغییر بدهید. 3
برنامه را بر روی یک تلفن واقعی یا شبیه ساز اجرا کنید و تست را انجام بدهید. 4

کدهای فایل MainActivity.class

package com.foray.articlelib;

import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class MainActivity extends AppCompatActivity {
    Button b1,b2;
    TextView tv;
    EditText ed1;

    String data;
    private final String file = "7Cloner.com site url";

    @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(v -> {
            data=ed1.getText().toString();
            try {
                FileOutputStream fOut = openFileOutput(file, MODE_PRIVATE);
                fOut.write(data.getBytes());
                fOut.close();
                Toast.makeText(getBaseContext(),"فایل ذخیره سازی شد",Toast.LENGTH_SHORT).show();
            }
            catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        });

        b2.setOnClickListener(v -> {
            try {
                FileInputStream fin = openFileInput(file);
                int c;
                StringBuilder temp= new StringBuilder();
                while( (c = fin.read()) != -1){
                    temp.append((char) c);
                }
                tv.setText(temp.toString());
                Toast.makeText(getBaseContext(),"file read",Toast.LENGTH_SHORT).show();
            }
            catch(Exception ignored){
            }
        });
    }
}

کدهای فایل 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:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="حافظه داخلی"
        android:textSize="35dp" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textview"
        android:layout_centerHorizontal="true"
        android:text="7Cloner.com"
        android:textColor="#000000"
        android:textSize="35dp" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true"
        android:text="ذخیره سازی" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageView"
        android:layout_marginTop="42dp"
        android:focusable="true"
        android:hint="متن مد نظر خود را اینجا وارد کنید ..."
        android:textColorHighlight="#000000"
        android:textColorHint="#B6B6B6" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="200dp"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:src="@drawable/abc" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:text="خواندن" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText"
        android:text="اطلاعاتی که خوانده میشود در اینجا نمایش داده میشود."
        android:textColor="#000000"
        android:textSize="14sp" />

</RelativeLayout>

نتیجه

خواندن اطلاعات از حافظه خواندن اطلاعات از حافظه خواندن اطلاعات از حافظه

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

خواندن اطلاعات از حافظه

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

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر نیاز است تا ابتدا وارد سایت شوید.

هیچ نظری ارسال نشده است.

قیمت آموزش
رایگان
نوع دسترسی
رایگان

این مقاله در حال حاضر تنها به روش رایگان در دسترس می باشد.

ناصر خالدی
مدرس دوره

ناصر خالدی

مهندس شبکه, امنیت, برنامه نویسی تلفن های هوشمند, طراح وب سایت و متخصص هوش مصنوعی

گفتگوی برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن

مقالات پیشنهادی

اندروید

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


۱۰۵۵
۰
۲۹ آبان ۱۳۹۹

پی اچ پی - PHP

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


۹۴۶
۰
۱۳ آذر ۱۳۹۹

هوش مصنوعی

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


۸۶۰
۰
۱۱ آذر ۱۳۹۹

جاوا اسکریپت

جاوا اسکریپت یک زبان پویا و محبوب مبتنی بر شیء, داینامیک و مفسری می باشد. این زبان برای برنامه نویسی سمت سرور و کلاینت استفاده میشود که ...


۸۶۸
۰
۱۳ آذر ۱۳۹۹

Fatal error: Uncaught wfWAFStorageFileException: Unable to verify temporary file contents for atomic writing. in /home/clonerco/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php:52 Stack trace: #0 /home/clonerco/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php(659): wfWAFStorageFile::atomicFilePutContents('/home/clonerco/...', '<?php exit('Acc...') #1 [internal function]: wfWAFStorageFile->saveConfig('livewaf') #2 {main} thrown in /home/clonerco/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php on line 52