Android: almacenamiento interno

Android proporciona muchos tipos de almacenamiento para que las aplicaciones almacenen sus datos. Estos lugares de almacenamiento son preferencias compartidas, almacenamiento interno y externo, almacenamiento SQLite y almacenamiento a través de una conexión de red.

En este capítulo veremos el almacenamiento interno. El almacenamiento interno es el almacenamiento de datos privados en la memoria del dispositivo.

De forma predeterminada, estos archivos son privados y solo su aplicación accede a ellos y se eliminan cuando el usuario elimina su aplicación.

Archivo de escritura

Para usar el almacenamiento interno para escribir algunos datos en el archivo, llame al método openFileOutput () con el nombre del archivo y el modo. El modo puede ser privado, público, etc. Su sintaxis se da a continuación:

FileOutputStream fOut = openFileOutput("file name here",MODE_WORLD_READABLE);

El método openFileOutput () devuelve una instancia de FileOutputStream. Entonces lo recibe en el objeto de FileInputStream. Después de eso, puede llamar al método de escritura para escribir datos en el archivo. Su sintaxis se da a continuación:

String str = "data";
fOut.write(str.getBytes());
fOut.close();

Leyendo archivo

Para leer desde el archivo que acaba de crear, llame al método openFileInput () con el nombre del archivo. Devuelve una instancia de FileInputStream. Su sintaxis se da a continuación:

FileInputStream fin = openFileInput(file);

Después de eso, puede llamar al método de lectura para leer un carácter a la vez del archivo y luego puede imprimirlo. Su sintaxis se da a continuación:

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

//string temp contains all the data of the file.
fin.close();

Aparte de los métodos de escritura y cierre, existen otros métodos proporcionados por el FileOutputStreamclass para una mejor escritura de archivos. Estos métodos se enumeran a continuación:

No Señor Método y descripción
1

FileOutputStream(File file, boolean append)

Este método construye un nuevo FileOutputStream que escribe en el archivo.

2

getChannel()

Este método devuelve un FileChannel de solo escritura que comparte su posición con esta secuencia.

3

getFD()

Este método devuelve el descriptor de archivo subyacente.

4

write(byte[] buffer, int byteOffset, int byteCount)

Este método escribe los bytes de recuento del búfer de matriz de bytes comenzando en el desplazamiento de posición en esta secuencia

Aparte de los métodos de lectura y cierre, existen otros métodos proporcionados por el FileInputStreamclass para una mejor lectura de archivos. Estos métodos se enumeran a continuación:

No Señor Método y descripción
1

available()

Este método devuelve un número estimado de bytes que se pueden leer u omitir sin bloquear para obtener más entradas

2

getChannel()

Este método devuelve un FileChannel de solo lectura que comparte su posición con esta secuencia.

3

getFD()

Este método devuelve el descriptor de archivo subyacente.

4

read(byte[] buffer, int byteOffset, int byteCount)

Este método lee como máximo los bytes de longitud de esta secuencia y los almacena en la matriz de bytes b comenzando en el desplazamiento

Ejemplo

A continuación, se muestra un ejemplo que demuestra el uso del almacenamiento interno para almacenar y leer archivos. Crea una aplicación de almacenamiento básica que le permite leer y escribir desde el almacenamiento interno.

Para experimentar con este ejemplo, puede ejecutarlo en un dispositivo real o en un emulador.

Pasos Descripción
1 Utilizará Android Studio IDE para crear una aplicación de Android en un paquete com.example.sairamkrishna.myapplication.
2 Modifique el archivo src / MainActivity.java para agregar el código necesario.
3 Modifique res / layout / activity_main para agregar los componentes XML respectivos
4 Ejecute la aplicación y elija un dispositivo Android en ejecución e instale la aplicación en él y verifique los resultados

A continuación se muestra el contenido del archivo de actividad principal modificado src/MainActivity.java.

package com.example.sairamkrishna.myapplication;

import android.app.Activity;
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 java.io.FileInputStream;
import java.io.FileOutputStream;

public class MainActivity extends Activity  {
   Button b1,b2;
   TextView tv;
   EditText ed1;

   String data;
   private String file = "mydata";

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

      b1=(Button)findViewById(R.id.button);
      b2=(Button)findViewById(R.id.button2);

      ed1=(EditText)findViewById(R.id.editText);
      tv=(TextView)findViewById(R.id.textView2);
      b1.setOnClickListener(new View.OnClickListener() {
         
         @Override
         public void onClick(View v) {
            data=ed1.getText().toString();
            try {
               FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE);
               fOut.write(data.getBytes());
               fOut.close();
               Toast.makeText(getBaseContext(),"file saved",Toast.LENGTH_SHORT).show();
            }
            catch (Exception e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
            }
         }
      });

      b2.setOnClickListener(new View.OnClickListener() {
         
         @Override
         public void onClick(View v) {
            try {
               FileInputStream fin = openFileInput(file);
               int c;
               String temp="";
               while( (c = fin.read()) != -1){
                  temp = temp + Character.toString((char)c);
               }
               tv.setText(temp);
               Toast.makeText(getBaseContext(),"file read",Toast.LENGTH_SHORT).show();
            }
            catch(Exception e){
            }
         }
      });
   }
}

A continuación se muestra el contenido modificado del xml res/layout/activity_main.xml.

En el siguiente código abc indica el logo de tutorialspoint.com
<?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:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
      
   <TextView android:text="Internal storage" android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />
   
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Save"
      android:id="@+id/button"
      android:layout_alignParentBottom="true"
      android:layout_alignLeft="@+id/textView"
      android:layout_alignStart="@+id/textView" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:hint="Enter Text"
      android:focusable="true"
      android:textColorHighlight="#ff7eff15"
      android:textColorHint="#ffff25e6"
      android:layout_below="@+id/imageView"
      android:layout_alignRight="@+id/textView"
      android:layout_alignEnd="@+id/textView"
      android:layout_marginTop="42dp"
      android:layout_alignLeft="@+id/imageView"
      android:layout_alignStart="@+id/imageView" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="load"
      android:id="@+id/button2"
      android:layout_alignTop="@+id/button"
      android:layout_alignRight="@+id/editText"
      android:layout_alignEnd="@+id/editText" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Read"
      android:id="@+id/textView2"
      android:layout_below="@+id/editText"
      android:layout_toLeftOf="@+id/button2"
      android:layout_toStartOf="@+id/button2"
      android:textColor="#ff5bff1f"
      android:textSize="25dp" />
      
</RelativeLayout>

A continuación se muestra el contenido de la res/values/string.xml.

<resources>
   <string name="app_name">My Application</string>
</resources>

A continuación se muestra el contenido de AndroidManifest.xml archivo.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
      
   </application>
</manifest>

Intentemos ejecutar nuestra aplicación de almacenamiento que acabamos de modificar. Supongo que habías creado tuAVDmientras realiza la configuración del entorno. Para ejecutar la aplicación desde Android Studio, abra uno de los archivos de actividad de su proyecto y haga clic en el icono Ejecutar de la barra de herramientas. Android Studio instala la aplicación en su AVD y la inicia y, si todo está bien con su configuración y aplicación, se mostrará la siguiente ventana del Emulador:

Ahora, lo que debe hacer es ingresar cualquier texto en el campo. Por ejemplo, he introducido un texto. Presione el botón guardar. La siguiente notificación aparecería en tu AVD -

Ahora, cuando presione el botón de carga, la aplicación leerá el archivo y mostrará los datos. En el caso de nuestro, se devolverían los siguientes datos:

Tenga en cuenta que puede ver este archivo cambiando a la pestaña DDMS. En DDMS, seleccione el explorador de archivos y navegue por esta ruta.

tools>android>android device Monitor

Esto también se muestra en la siguiente imagen.