[JAVA] * Android * Sauvegarde / chargement de fichiers sur le stockage interne

introduction

Bonjour. Je vais commencer à écrire des articles aujourd'hui. J'ai l'intention d'utiliser Qiita comme mémo de programmation. J'utilise Android depuis environ 2 ans. Je suis un étudiant diplômé qui commencera à travailler l'année prochaine.

Cette fois, je vais vous expliquer comment enregistrer et charger des fichiers dans la mémoire interne d'Android. Le contenu de chaque article sur le stockage Android est légèrement différent, et je pense que certaines personnes peuvent se perdre, alors j'écrirai un article standard.

supposition

L'environnement de développement est le suivant. *Android Studio 4.0.1 *targetSdkVersion 28 *Google Nexus 5x

Stockage interne et stockage externe

Android dispose d'un stockage interne et d'un stockage externe.

■ Stockage interne

■ Stockage externe

Les trois types de stockage suivants sont utilisés pour le stockage.

Chaque stockage est enregistré dans ce qui suit dans la structure de l'explorateur de fichiers de périphérique d'Android Studio.

Enregistrez le fichier dans la mémoire interne

Pour enregistrer un fichier, utilisez la méthode openFileOutput () `` `pour obtenir une instance de`` FileOutputStream. Cela vous permettra d'ouvrir le flux. De plus, si vous utilisez ```openFileOutput () `` `, le chemin sera automatiquement acquis et sauvegardé même si vous ne spécifiez pas le chemin du stockage interne.

FileOutputStream fileOutputstream = openFileOutput("text.txt", Context.MODE_PRIVATE);

** Premier argument ** "/chemin/nom de fichier"

** Deuxième argument **

valeur La description
MODE_WORLD_READABLE Peut être référencé à partir d'autres applications
MODE_WORLD_WRITEABLE Peut être écrit à partir d'autres applications
MODE_PRIVATE Non accessible depuis d'autres applications
MODE_APPEND S'il y a un fichier, ajoutez

De plus, si vous souhaitez spécifier plusieurs modes, vous pouvez spécifier plusieurs modes en connectant des tuyaux. mode_private | mode_append

Après cela, convertissez la chaîne de caractères que vous souhaitez écrire dans le fichier en un tableau de type d'octets et écrivez-la dans le flux en utilisant write () '' ``.

fileOutputStream.write(str.getBytes());

Lire des fichiers depuis le stockage

Pour lire un fichier, récupérez une instance de `FileInputStream``` en utilisant la méthode` `ʻopenFileInput ()`. Cela vous permettra d'ouvrir le flux.

FileInputStream fileInputStream = openFileInput("text.txt");

inputstreamreaderLit les octets du flux et les décode en caractères spécifiés. IlbufferedreaderMettez-le et lisez-le ligne par ligne. Pour augmenter l'efficacité de la conversionbufferedreaderÀ l'intérieurinputstreamreaderCela semble bon à envelopper.

BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream, "UTF-8"));
String lineBuffer;
while (true){
    lineBuffer = reader.readLine();
    if (lineBuffer != null){
        text += lineBuffer;
    }
    else {
        break;
    }
}

Exemple de code

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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">
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="50dp"
        android:layout_marginTop="100dp"
        android:text="Save File"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="100dp"
        android:layout_marginTop="100dp"
        android:text="Read File"
        app:layout_constraintStart_toEndOf="@+id/button1"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="120dp"
        android:text=""
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText" />
    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

MainActivity.java

package com.example.keita.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class MainActivity extends AppCompatActivity {
    private TextView textView;
    private Button button1;
    private Button button2;
    private EditText editText;
    private String fileName = "test.txt";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.textView = findViewById(R.id.textView);
        this.editText = findViewById(R.id.editText);
        this.button1 = findViewById(R.id.button1);
        this.button2 = findViewById(R.id.button2);
        this.button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String text = editText.getText().toString();
                saveFile(fileName, text);
            }
        });
        this.button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = readFile(fileName);
                textView.setText(str);
            }
        });
    }


    private void saveFile(String file, String str){
        try {
            FileOutputStream fileOutputStream = openFileOutput(file, MODE_PRIVATE | MODE_APPEND);
            fileOutputStream.write(str.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    private String readFile(String file){
        String text = null;
        try {
            FileInputStream fileInputStream = openFileInput(file);
            BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream, "UTF-8"));
            String lineBuffer;
            while (true){
                lineBuffer = reader.readLine();
                if (lineBuffer != null){
                    text += lineBuffer;
                }
                else {
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return text;
    }
}

Recommended Posts

* Android * Sauvegarde / chargement de fichiers sur le stockage interne
* Android * Enregistrement / chargement d'images sur un stockage externe
* Android * À propos de l'enregistrement / de la lecture de fichiers sur un stockage externe et des autorisations
Compressez et téléchargez plusieurs fichiers sur Firebase Storage sur Android.
Android-Télécharger des fichiers image vers Azure Blob Storage en Java
Ajouter un fichier au fichier jar
Introduction aux fichiers JAR
Introduction à la mise en page Android