Almacenamiento interno en Android con ejemplo

El objetivo de este artículo es mostrar a los usuarios cómo usar el almacenamiento interno. En este artículo se creará una aplicación que pueda escribir datos en un archivo y almacenarlos en el almacenamiento interno y leer datos del archivo y mostrarlos en la actividad principal usando TextView . Guardar y cargar datos en el almacenamiento interno es privado para una aplicación a la que no pueden acceder otras aplicaciones. Cuando se desinstala la aplicación, se eliminan los datos almacenados internamente por esa aplicación. Para leer y escribir en el almacenamiento interno de Android tenemos dos métodos 

  • OpenFileOutput(): se utiliza para crear y guardar un archivo. Este método devuelve una instancia de FileOutputStream.

Sintaxis: OpenFileOutput (nombre de archivo de string, modo int)

Parámetros: 

modo: 

Context.MODE_PRIVATE: si el archivo existe, se anula; de lo contrario, se crea un nuevo archivo. 

Context.MODE_APPEND: si el archivo existe, los datos se agregan al final del archivo.

Devoluciones: 

Objeto FileOutputStream 

  • OpenFileInput(): se utiliza para leer datos de un archivo, esto devuelve una instancia de FileInputStream. 

Sintaxis: OpenFileInput (nombre de archivo de string)

Devoluciones:

Objeto FileInputStream 

Ejemplo

qué

Internal Storage in Android  Sample GIF

Implementación paso a paso

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.

Paso 2: trabajar con el archivo activity_main.xml

El archivo  activity_main.xml tiene los siguientes widgets

  1. Un EditText para aceptar la entrada del usuario
  2. Dos botones uno para leer datos y otro para escribir
  3. Un TextView para mostrar el contenido del archivo

A continuación se muestra el código para el  archivo  activity_main.xml .

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">
 
    <TextView
        android:id="@+id/textView2"
        android:layout_width="337dp"
        android:layout_height="28dp"
        android:text="  File Content "
        android:textAlignment="center"
        android:textColor="#000"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.52" />
 
    <Button
        android:id="@+id/write_button"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:layout_marginStart="160dp"
        android:layout_marginEnd="159dp"
        android:layout_marginBottom="16dp"
        android:text="Write"
        app:layout_constraintBottom_toTopOf="@+id/read_button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.904" />
 
    <Button
        android:id="@+id/read_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="160dp"
        android:layout_marginEnd="158dp"
        android:layout_marginBottom="48dp"
        android:text="Read"
        app:layout_constraintBottom_toTopOf="@+id/textView2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent" />
 
    <EditText
        android:id="@+id/userInput"
        android:layout_width="319dp"
        android:layout_height="50dp"
        android:layout_marginStart="46dp"
        android:layout_marginTop="91dp"
        android:layout_marginEnd="46dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 
    <TextView
        android:id="@+id/content"
        android:layout_width="332dp"
        android:layout_height="306dp"
        android:layout_marginStart="33dp"
        android:layout_marginTop="21dp"
        android:layout_marginEnd="33dp"
        android:layout_marginBottom="6dp"
        android:text=""
        android:textAlignment="center"
        android:textColor="#000"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.461"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2"
        app:layout_constraintVertical_bias="0.0" />
 
</androidx.constraintlayout.widget.ConstraintLayout>

Interfaz de usuario de salida:

Output UI

Paso 3: trabajar con el archivo MainActivity.java

Dentro del archivo MainActivity.java vamos a hacer lo siguiente:

Inicializar variables: 

Java

private String filename = "demoFile.txt";
read = findViewById(R.id.read_button);
write = findViewById(R.id.write_button);
userInput = findViewById(R.id.userInput);
fileContent = findViewById(R.id.content);

El archivo que se creará es DemoFile.txt. esto se puede encontrar en Device File Explorer > data > data > application_package > files 

Métodos de lectura y escritura:

El siguiente método se utiliza para leer datos de los datos internos. 

Java

private void readData()
{
 
    try
    {
      FileInputStream fin = openFileInput(filename);
      int a;
      StringBuilder temp = new StringBuilder();
      while ((a = fin.read()) != -1)
      {
        temp.append((char)a);
      }
       
      // setting text from the file.
      fileContent.setText(temp.toString());
      fin.close();
     }
    catch (IOException e)
    {
      e.printStackTrace();
    }
  printMessage("reading to file " + filename + " completed..");
}

El método utilizado para crear un archivo y escribir datos en el almacenamiento interno. 

Java

private void writeData()
{
    try
    {
      FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE);
      String data = userInput.getText().toString();
      fos.write(data.getBytes());
      fos.flush();
      fos.close();
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }
    userInput.setText("");
    printMessage("writing to file " + filename + "completed...");
}

A continuación se muestra el código completo del  archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.

Java

import android.content.Context;
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 androidx.appcompat.app.AppCompatActivity;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
    // declare the variables
    Button read, write;
    EditText userInput;
    TextView fileContent;
 
    private String filename = "demoFile.txt";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        read = findViewById(R.id.read_button);
        write = findViewById(R.id.write_button);
        userInput = findViewById(R.id.userInput);
        fileContent = findViewById(R.id.content);
 
        read.setOnClickListener(this);
        write.setOnClickListener(this);
    }
 
    public void printMessage(String m) {
        Toast.makeText(this, m, Toast.LENGTH_LONG).show();
    }
 
    @Override
    public void onClick(View view) {
        Button b = (Button) view;
 
        // get the button text : in out case either read or
        // write depending on the button pressed.
        String b_text = b.getText().toString();
 
        switch (b_text.toLowerCase()) {
            case "write": {
                writeData();
                break;
            }
            case "read": {
                readData();
                break;
            }
        }
    }
 
    private void writeData() {
 
        try {
            FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE);
            String data = userInput.getText().toString();
            fos.write(data.getBytes());
            fos.flush();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        userInput.setText("");
        printMessage("writing to file " + filename + "completed...");
    }
 
    private void readData() {
        try {
            FileInputStream fin = openFileInput(filename);
            int a;
            StringBuilder temp = new StringBuilder();
            while ((a = fin.read()) != -1) {
                temp.append((char) a);
            }
 
            // setting text from the file.
            fileContent.setText(temp.toString());
            fin.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        printMessage("reading to file " + filename + " completed..");
    }
}

Producción 

Publicación traducida automáticamente

Artículo escrito por clivefernandes777 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *