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é
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
- Un EditText para aceptar la entrada del usuario
- Dos botones uno para leer datos y otro para escribir
- 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:
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