Hoy vamos a analizar el almacenamiento interno de Android. Android ofrece algunas formas estructuradas para almacenar datos. Estas incluyen
- Preferencias compartidas
- Almacenamiento interno
- Almacenamiento externo
- Almacenamiento SQLite
- Almacenamiento a través de conexión a la red (en la nube)
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 deFileOutputStream
. 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