[Android Studio] Sección 19 Almacenamiento interno de archivos almacenados

Tabla de contenido

1. Método de almacenamiento

2. Depósito de procedimientos almacenados

3. Recuperación de procedimientos almacenados.

4. Múltiples modos del método openFileOutput()

1. Método de almacenamiento

Hay varias formas de almacenar archivos en Android Studio. A continuación se muestran varios métodos comunes de almacenamiento de archivos:

  1. Almacenamiento interno:

    • Llame  getFilesDir() al método para obtener el directorio de almacenamiento interno de la aplicación.
    • Utilice este directorio para crear archivos y directorios en un directorio privado de la aplicación al que solo puede acceder la aplicación misma.
    • Puede utilizar  File clases de Java o Kotlin  java.io.File para operaciones de archivos.
  2. Almacenamiento externo:

    • Llame  Environment.getExternalStorageDirectory() al método para obtener el directorio de almacenamiento externo.
    • Es necesario declarar los permisos adecuados (p. ej  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>.
    • En Android 10 (nivel de API 29) y versiones posteriores, debe utilizar la API MediaStore o SAF (Storage Access Framework) para acceder a archivos en el almacenamiento externo.
  3. Preferencias compartidas:

    • Utilice SharedPreferences para almacenar fácilmente pequeñas cantidades de datos de pares clave-valor.
    • Obtenga el objeto SharedPreferences mediante  getSharedPreferences() el método o  getPreferences() .
    • Utilice  edit() los métodos del objeto SharedPreferences para comenzar a editar y  putXxx() almacenar datos a través de métodos.
  4. Base de datos SQLite:

    • Si necesita almacenar grandes cantidades de datos estructurados, puede utilizar una base de datos SQLite.
    • Es necesario crear tablas, definir clases de modelo y realizar operaciones SQL.
    • Puede utilizar la clase SQLiteOpenHelper o una biblioteca de terceros proporcionada por Android para ayudar en la gestión de las operaciones de la base de datos.

Elija un método de almacenamiento de archivos adecuado según las necesidades específicas y el volumen de datos. Recuerde abordar los problemas de permisos y adaptarse a los cambios de acceso al almacenamiento en Android 10 y versiones posteriores cuando utilice almacenamiento externo.

2. Depósito de procedimientos almacenados

Utilice openFileOutput()el método para almacenar datos en un archivo en el almacenamiento interno:

String filename = "data";
String content = "要存储的内容";

try {
    FileOutputStream fos = openFileOutput(filename, MODE_PRIVATE);
    fos.write(content.getBytes());
    fos.close();
    // 存储成功
} catch (IOException e) {
    e.printStackTrace();
    // 存储失败,处理异常
}

En el código anterior:

  • openFileOutput() El método se utiliza para abrir una secuencia de salida y especificar el nombre del archivo y el modo del archivo (usado aquí  MODE_PRIVATE para indicar que solo la aplicación actual puede acceder al archivo).
  • write() El método escribe contenido en el flujo de salida en bytes.
  • Finalmente,  close() cierre el flujo de salida a través del método para asegurarse de que se guarden los datos.

Tenga en cuenta que al openFileOutput()almacenar un archivo usando , se sobrescribirá el archivo con el mismo nombre. Si necesita agregar contenido en lugar de sobrescribir el contenido original, utilice otros métodos (como leer openFileInput()el contenido del archivo, luego agregar el nuevo contenido y luego escribirlo nuevamente).

<?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=".DictionaryTableActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:ignore="MissingConstraints"
        tools:layout_editor_absoluteX="26dp"
        tools:layout_editor_absoluteY="0dp">

        <EditText
            android:id="@+id/edit_1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:autofillHints="username"
            android:hint="输入内容"
            tools:ignore="MissingConstraints"/>

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
public class DictionaryTableActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dictionary_table);
        editText = (EditText) findViewById(R.id.edit_1);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        String input = editText.getText().toString();
        save(input);
    }

    private void save(String input){
        FileOutputStream fileOutputStream = null;
        BufferedWriter writer = null;
        try {
           fileOutputStream =  openFileOutput("data", Context.MODE_PRIVATE);
           writer =  new BufferedWriter(new OutputStreamWriter(fileOutputStream));
           writer.write(input);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if (writer != null){
                    writer.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

3. Recuperación de procedimientos almacenados.


public class DictionaryTableActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dictionary_table);
   
     
        editText = (EditText) findViewById(R.id.edit_1);
        editText.setText(load());
        editText.setSelection(load().length());
    }

  
    private String load(){
        FileInputStream fileInputStream = null;
        BufferedReader reader = null;
        StringBuilder stringBuffer = new StringBuilder();
        try {
            fileInputStream = openFileInput("data");
            reader  =  new BufferedReader(new InputStreamReader(fileInputStream));
            String Line ="";
            while ( (Line = reader.readLine()) != null){
                stringBuffer.append(Line);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                assert reader != null;
                reader.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return stringBuffer.toString();
    }

4. openFileOutput()Múltiples modos de métodos ( mode)

Modos de uso común y asuntos que requieren atención:

  1. MODE_PRIVATE:

    • Constante de patrón: 0 o Context.MODE_PRIVATE
    • Sólo la aplicación actual puede acceder al archivo.
    • Si el archivo especificado no existe, se crea un archivo nuevo; si el archivo ya existe, se sobrescribe el contenido original.
    • Tenga cuidado de no almacenar datos importantes, sensibles o confidenciales en  MODE_PRIVATE archivos con un esquema, ya que otras aplicaciones no podrán acceder a ellos.
  2. MODE_APPEND:

    • Constantes de modo:Context.MODE_APPEND
    • Agrega contenido al escribir un archivo sin sobrescribir el contenido original.
    • Si el archivo especificado no existe, se crea un archivo nuevo.
    • Adecuado para escenarios en los que es necesario agregar datos al final de un archivo existente.
  3. MODE_WORLD_READABLE:

    • Constantes de modo:Context.MODE_WORLD_READABLE
    • Permita que otras aplicaciones lean el archivo.
    • Este modo no se recomienda ya que puede provocar fugas de datos y problemas de seguridad.
    • Este modo no es compatible con Android 7.0 y superiores.
  4. MODE_WORLD_WRITEABLE:

    • Constantes de modo:Context.MODE_WORLD_WRITEABLE
    • Permita que otras aplicaciones escriban en el archivo.
    • Este modo no se recomienda ya que puede provocar fugas de datos y problemas de seguridad.
    • Este modo no es compatible con Android 7.0 y superiores.

Al elegir un modo de almacenamiento, haga su elección según sus necesidades específicas y consideraciones de seguridad. Trate de evitar el uso MODE_WORLD_READABLEy MODE_WORLD_WRITEABLEproteger la seguridad de los datos. Si necesita agregar contenido sin sobrescribir el contenido original, puede usar MODE_APPENDel modo. Para archivos privados normales, utilizar el valor predeterminado MODE_PRIVATEpuede satisfacer las necesidades de la mayoría de situaciones.

Supongo que te gusta

Origin blog.csdn.net/AA2534193348/article/details/131493806
Recomendado
Clasificación