betacode

Руководство Android Internal Storage

  1. Android Internal Storage
  2. Пример чтения и записи данных во внутренней памяти
  3. Phụ lục: Thiết kế giao diện

1. Android Internal Storage

Android Internal Storage: Это место хранения личных данных каждого приложения, эти данные хранятся и используются этим же приложением. Другие приложения не имеют доступа. Обычно, когда приложение удаляется с устройства Android, сязанные файлы данных так же будут удалены.
Еще одна особенность, это при работе с файлами данных во Внутренней памяти, вы можете работать только с простыми файлами, и не сможете работать с файлами имеющими ссылку.
Открыть файл и написать.
// Is a simple file name.
// Note!! Do not allow the path.
String simpleFileName ="note.txt";


// Open Stream to write file.
FileOutputStream out = openFileOutput(simpleFileName, MODE_PRIVATE);
У вас есть 4 варианта записи:
Режим
Описание
MODE_PRIVATE
Это режим по умолчанию, написанный файл используется только приложением который создал этот файл, или имеющий тот же User ID.
MODE_APPEND
Режим добавления данных в существующий файл.
MODE_ENABLE_WRITE_AHEAD_LOGGING
MODE_WORLD_READABLE
Эти режими очень опасны. Похожи на дыру в безопасности Android, лучше не использовать, вы можете использовать заменяющие техники как:
  • ContentProvider
  • BroadcastReceiver
  • Service
MODE_WORLD_WRITEABLE
Эти режими очень опасны. Похожи на дыру в безопасности Android, лучше не использовать, вы можете использовать заменяющие техники как:
  • ContentProvider
  • BroadcastReceiver
  • Service
MODE_MULTI_PROCESS
Режим позволяет запись нескольких процессов (process) в файл. Но мы не рекомендуем использовать этот режим потому что он не работает на некоторых версиях Android. ы можете использовать заменяющие техники как:
  • ContentProvider
Открыть файл прочитать данные:
// Is a simple file name.
// Note!! Do not allow the path.
String simpleFileName = "note.txt";

// Open stream to read file.
FileInputStream in = this.openFileInput(simpleFileName);

2. Пример чтения и записи данных во внутренней памяти

Теперь вы можете создать пример записи данных в файл, который будет сохранен во внутреннй памяти, и читать данные из этого файла.
Создать project с названием InternalStorageDemo.
  • File > New > New Project > Empty Activity
    • Name: InternalStorageDemo
    • Package name: org.o7planning.internalstoragedemo
    • Language: Java
Интерфейс приложения:
The interface of this application is very simple, if you are interested in the steps to create it, see the appendix at the end of the article.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="0dp"
        android:layout_height="122dp"
        android:layout_marginStart="21dp"
        android:layout_marginLeft="21dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button_save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="44dp"
        android:text="Save to File"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="91dp"
        android:layout_marginStart="29dp"
        android:layout_marginLeft="29dp"
        android:layout_marginTop="29dp"
        android:layout_marginEnd="21dp"
        android:layout_marginRight="21dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button_save" />

    <Button
        android:id="@+id/button_read"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="38dp"
        android:text="Read File"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package org.o7planning.internalstoragedemo;

import android.os.Bundle;
import androidx.appcompat.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;

    // Is a simple file name.
    // Note!! Do not allow the path.
    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 {
            // Open Stream to write 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 {
            // Open stream to read 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();
        }
    }

}
Используйте "Android Device Manager", чтобы посмотреть созданный файл в системе.
See more about "Device File Explorer":

3. Phụ lục: Thiết kế giao diện

Steps to design the interface of the application in this article:
Add Button"Save to File":
Add a TextView:
Add Button"Read File":
Set ID, Text for components on the interface:

Pуководства Android

Show More