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

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

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


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

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

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

 

به طور پیش فرض این پرونده ها خصوصی هستند و فقط کاربر برنامه شما را حذف می کند و حذف می شود.
نوشتن فایل
به منظور استفاده از حافظه داخلی برای نوشتن برخی داده ها در پرونده ، با روش 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);

پس از آن می توانید برای خواندن یک کاراکتر در یک زمان از فایل ،از روش read استفاده کنید و سپس می توانید آن نمایش دهید  اینم به شکل زیرهست

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

fin.close();

 

جدا از روشهای نوشتن ، روشهای دیگری نیز وجود دارد که توسط کلاس FileOutputStream برای نوشتن فایل ها ارائه شده است. این روش ها  

FileOutputStream(File file, boolean append)
این روش FileOutputStream جدیدی را برای نوشتن برای پرونده ایجاد می کند.

getChannel()

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

getFD()
این روش توصیف کننده فایل اصلی را برمی گرداند


write(byte[] buffer, int byteOffset, int byteCount)
این روش بایت شمارش را از بافر آرایه بایت شروع می کند و در موقعیت جبران این جریان شروع می شود

روش های دیگه خوندن هم به این شکله

available()
در دسترس()

این روش تعداد بایتهای تخمینی را که بدون مسدود کردن برای ورودی های بیشتر قابل خواندن یا پرش هستند ، برمی گرداند


getChannel ()

این روش FileChannel فقط خواندنی را نشان می دهد که موقعیت خود را با این جریان به اشتراک می گذارد

getFD ()

این روش توصیف کننده فایل اصلی را برمی گرداند

read(byte[] buffer, int byteOffset, int byteCount)
این روش حداکثر بایت های این جریان را می خواند و آنها را در آرایه بایت b شروع می کند

 

در انتها یه مثال برای ذخیره فایل و تمرین نشون میدم

توی mainactivity این کدها رو بنویسید کپی نکنید

package com.writefile.ayromloo;

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 هم اینه

 

<?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>

 

امیدوارم استفاده کنید