Hướng dẫn lập trình Android với bộ lưu trữ trong (Internal Storage)
Công ty Vĩnh Cửu tuyển dụng lập trình viên Java

1- Android Internal Storage

Android Internal Storage: Là nơi lưu trữ các dữ liệu cá nhân của từng ứng dụng, mà các dữ liệu này được lưu trữ và sử dụng cho riêng ứng dụng đó. Các ứng dụng khác không thể truy cập vào được. Thông thường khi ứng dụng bị gỡ bỏ khỏi thiết bị Android, các file dữ liệu liên quan cũng bị xóa bỏ theo.
Một đặc điểm nữa khi bạn làm việc với các file dữ liệu ở bộ nhớ trong bạn chỉ có thể làm việc với tên file đơn giản mà không thể làm việc với một tên file có đường dẫn.

Mở file ghi dữ liệu.

// Là một tên file đơn giản.
// Chú ý!! Không cho phép đường dẫn.
String simpleFileName ="note.txt";


// Mở một luồng ghi file.
FileOutputStream out = openFileOutput(simpleFileName, MODE_PRIVATE);
Bạn có 4 lựa chọn chế độ ghi:
Chế độ tạo file Mô tả
MODE_PRIVATE Đây là chế độ mặc định, file ghi ra chỉ được sử dụng bởi ứng dụng tạo ra nó, hoặc chia sẻ với cùng User ID.
MODE_APPEND Chế độ nối thêm dữ liệu vào file nếu nó đã tồn tại.
MODE_ENABLE_WRITE_AHEAD_LOGGING  
MODE_WORLD_READABLE Các chế độ này rất nguy hiểm, nó giống như một lỗ hổng bảo mật trong Android, tốt nhất không nên sử dụng, bạn có thể sử dụng các kỹ thuật khác thay thế như:
  • ContentProvider
  • BroadcastReceiver
  • Service
MODE_WORLD_WRITEABLE
MODE_MULTI_PROCESS Chế độ cho phép nhiều tiến trình (process) có thể ghi vào file. Tuy nhiên khuyến nghị không sử dụng chế độ này vì nó không làm việc trên một số phiên bản của Android. Bạn có thể sử dụng kỹ thuật khác để thay thế, chẳng hạn:
  • ContentProvider

Mở file đọc dữ liệu:

// Là một tên file đơn giản.
// Chú ý!! Không cho phép đường dẫn.
String simpleFileName = "note.txt";

// Mở một luồng đọc file.
FileInputStream in = this.openFileInput(simpleFileName);

2- Ví dụ đọc và ghi dữ liệu với bộ nhớ trong

Bây giờ bạn có thể làm một ví dụ ghi dữ liệu vào file lưu tại bộ nhớ trong, và đọc dữ liệu của file này.
Tạo một project có tên InternalStorageDemo.
Giao diện ứng dụng:
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: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="org.o7planning.internalstoragedemo.MainActivity">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:id="@+id/editText"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="120dp"
        android:id="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/editText"
        android:layout_alignRight="@+id/editText"
        android:layout_alignEnd="@+id/editText" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Save To File"
        android:id="@+id/button_save"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="43dp"
        android:layout_marginStart="43dp"
        android:layout_marginTop="63dp" />

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Read File"
        android:id="@+id/button_read"
        android:layout_alignTop="@+id/button_save"
        android:layout_toRightOf="@+id/button_save"
        android:layout_toEndOf="@+id/button_save" />
   
</RelativeLayout>
MainActivity.java
package org.o7planning.internalstoragedemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;

public class MainActivity extends AppCompatActivity {

   private Button saveButton;
   private Button readButton;

   private TextView textView;
   private EditText editText;
 
   // Là một tên file đơn giản.
   // Chú ý!! Không cho phép đường dẫn.
   private String simpleFileName = "note.txt";

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       this.saveButton = (Button) this.findViewById(R.id.button_save);
       this.readButton = (Button) this.findViewById(R.id.button_read);
       this.textView = (TextView) this.findViewById(R.id.textView);
       this.editText = (EditText) this.findViewById(R.id.editText);

       this.saveButton.setOnClickListener(new Button.OnClickListener() {

           @Override
           public void onClick(View v) {
               saveData();
           }
       });

       this.readButton.setOnClickListener(new Button.OnClickListener() {

           @Override
           public void onClick(View v) {
               readData();
           }
       });
   }


   private void saveData() {
       String data = this.editText.getText().toString();
       try {
 
           // Mở một luồng ghi file.
           FileOutputStream out = this.openFileOutput(simpleFileName, MODE_PRIVATE);
           // Ghi dữ liệu.
           out.write(data.getBytes());
           out.close();
           Toast.makeText(this,"File saved!",Toast.LENGTH_SHORT).show();
       } catch (Exception e) {
           Toast.makeText(this,"Error:"+ e.getMessage(),Toast.LENGTH_SHORT).show();
       }
   }

   private void readData() {
       try {
 
           // Mở một luồng đọc file.
           FileInputStream in = this.openFileInput(simpleFileName);

           BufferedReader br= new BufferedReader(new InputStreamReader(in));

           StringBuilder sb= new StringBuilder();
           String s= null;
           while((s= br.readLine())!= null)  {
               sb.append(s).append("\n");
           }
           this.textView.setText(sb.toString());

       } catch (Exception e) {
           Toast.makeText(this,"Error:"+ e.getMessage(),Toast.LENGTH_SHORT).show();
       }
   }

}
Chạy ứng dụng:
Sử dụng "Android Device Manager" bạn có thể xem được file đã được tạo ra trên hệ thống.
Xem thêm về "Công cụ quản lý thiết bị Android - Android Device Manager":