Ejemplo de Tutorial sobre Almacenamiento Interno de Android

Hoy vamos a analizar el almacenamiento interno de Android. Android ofrece algunas formas estructuradas para almacenar datos. Estas incluyen

En este tutorial, vamos a explorar cómo guardar y leer datos en archivos utilizando Almacenamiento interno de Android.

Almacenamiento interno de Android

El almacenamiento interno de Android es el almacenamiento de datos privados en la memoria del dispositivo. Por defecto, guardar y cargar archivos en el almacenamiento interno es privado para la aplicación, y otras aplicaciones no tendrán acceso a estos archivos. Cuando el usuario desinstala la aplicación, los archivos almacenados internamente asociados también se eliminan. Sin embargo, ten en cuenta que algunos usuarios hacen root a sus teléfonos Android, obteniendo acceso de superusuario. Estos usuarios podrán leer y escribir en los archivos que deseen.

Lectura y escritura de archivos de texto en el almacenamiento interno de Android

Android ofrece openFileInput y openFileOutput de las clases de E/S de Java para modificar la lectura y escritura de flujos de y hacia archivos locales.

  • openFileOutput(): Este método se utiliza para crear y guardar un archivo. Su sintaxis se muestra a continuación:

    FileOutputStream fOut = openFileOutput("nombre del archivo",Context.MODE_PRIVATE);
    

    El método openFileOutput() devuelve una instancia de FileOutputStream. Después de eso, podemos llamar al método write para escribir datos en el archivo. Su sintaxis se muestra a continuación:

    String str = "datos de prueba";
    fOut.write(str.getBytes());
    fOut.close();
    
  • openFileInput(): Este método se utiliza para abrir un archivo y leerlo. Devuelve una instancia de FileInputStream. Su sintaxis se muestra a continuación:

    FileInputStream fin = openFileInput(file);
    

    Después de eso, llamamos al método read para leer un carácter a la vez del archivo y luego imprimirlo. Su sintaxis es la siguiente:

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

    En el código anterior, la cadena temp contiene todos los datos del archivo.

  • Tenga en cuenta que estos métodos no aceptan rutas de archivos (por ejemplo, path/to/file.txt), solo toman nombres de archivos simples.

Estructura del Proyecto de Almacenamiento Interno en Android

Código de Ejemplo de Almacenamiento Interno en Android

El diseño XML contiene un EditText para escribir datos en el archivo y un botón de Escribir y Leer. Tenga en cuenta que los métodos onClick están definidos solo en el archivo XML como se muestra a continuación: activity_main.xml

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:padding="5dp"
        android:text="Android Read and Write Text from/to a File"
        android:textStyle="bold"
        android:textSize="28sp" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="22dp"
        android:minLines="5"
        android:layout_margin="5dp">

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Write Text into File"
        android:onClick="WriteBtn"
        android:layout_alignTop="@+id/button2"
        android:layout_alignRight="@+id/editText1"
        android:layout_alignEnd="@+id/editText1" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Read Text From file"
        android:onClick="ReadBtn"
        android:layout_centerVertical="true"
        android:layout_alignLeft="@+id/editText1"
        android:layout_alignStart="@+id/editText1" />

</RelativeLayout>

La MainActivity contiene la implementación de la lectura y escritura en archivos como se explicó anteriormente.

package com.journaldev.internalstorage;


import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class MainActivity extends Activity {

    EditText textmsg;
    static final int READ_BLOCK_SIZE = 100;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textmsg=(EditText)findViewById(R.id.editText1);
    }

    
// escribir texto en el archivo

    public void WriteBtn(View v) {
        
// agregar/escribir texto en el archivo

        try {
            FileOutputStream fileout=openFileOutput("mytextfile.txt", MODE_PRIVATE);
            OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
            outputWriter.write(textmsg.getText().toString());
            outputWriter.close();

            
// mostrar mensaje de archivo guardado

            Toast.makeText(getBaseContext(), "File saved successfully!",
                    Toast.LENGTH_SHORT).show();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    
// Leer texto del archivo

    public void ReadBtn(View v) {
        
// leyendo texto del archivo

        try {
            FileInputStream fileIn=openFileInput("mytextfile.txt");
            InputStreamReader InputRead= new InputStreamReader(fileIn);

            char[] inputBuffer= new char[READ_BLOCK_SIZE];
            String s="";
            int charRead;

            while ((charRead=InputRead.read(inputBuffer))>0) {
                
// conversión de carácter a cadena

                String readstring=String.copyValueOf(inputBuffer,0,charRead);
                s +=readstring;
            }
            InputRead.close();
            textmsg.setText(s);
            

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Aquí, se muestra un mensaje emergente cuando los datos se escriben correctamente en el almacenamiento interno y los datos se muestran en el propio EditText al leer los datos del archivo. La imagen que se muestra a continuación es el resultado del proyecto. La imagen representa texto que se está escribiendo en el almacenamiento interno y al hacer clic en Leer muestra de vuelta el texto en el mismo EditText.

¿Dónde se encuentra el archivo?

Para ver el archivo, abre el Monitor de dispositivos Android desde Herramientas->Android->Monitor de dispositivos Android. El archivo está presente en la carpeta data->data->{nombre del paquete}->archivos como se muestra en las imágenes a continuación: El archivo “mytextfile.txt” se encuentra en el nombre del paquete del proyecto, es decir, com.journaldev.internalstorage, como se muestra a continuación: Descarga el proyecto final para el ejemplo de almacenamiento interno de Android desde el siguiente enlace.

Descargar Proyecto de Ejemplo de Almacenamiento Interno de Android

Source:
https://www.digitalocean.com/community/tutorials/android-internal-storage-example-tutorial