[JAVA] * Android * Speichern / Laden von Dateien in den internen Speicher

Einführung

Hallo. Ich werde heute anfangen, Artikel zu schreiben. Ich habe vor, Qiita als Programmiernotiz zu verwenden. Ich benutze Android seit ungefähr 2 Jahren. Ich bin ein Doktorand, der nächstes Jahr anfangen wird zu arbeiten.

Dieses Mal werde ich erklären, wie Dateien im internen Speicher von Android gespeichert und geladen werden. Der Inhalt jedes Artikels über Android-Speicher ist etwas anders, und ich denke, dass einige Leute verloren gehen können, also werde ich einen Standard schreiben.

Annahme

Die Entwicklungsumgebung ist wie folgt. *Android Studio 4.0.1 *targetSdkVersion 28 *Google Nexus 5x

Interner Speicher und externer Speicher

Android hat internen Speicher und externen Speicher.

■ Interner Speicher

■ Externer Speicher

Es gibt die folgenden drei Arten von Speicher, die für die Speicherung verwendet werden.

Jeder Speicher wird im Folgenden in der Struktur des Gerätedateie-Explorers von Android Studio gespeichert.

Speichern Sie die Datei im internen Speicher

Um eine Datei zu speichern, rufen Sie eine Instanz von "FileOutputStream" mit der Methode "openFileOutput ()" ab. Auf diese Weise können Sie den Stream öffnen. Wenn Sie openFileOutput () verwenden, wird der Pfad automatisch erfasst und gespeichert, auch wenn Sie den Pfad des internen Speichers nicht angeben.

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

** Erstes Argument ** "/Pfad/Dateiname"

** Zweites Argument **

Wert Erläuterung
MODE_WORLD_READABLE Kann von anderen Apps referenziert werden
MODE_WORLD_WRITEABLE Kann aus anderen Apps geschrieben werden
MODE_PRIVATE Nicht über andere Apps zugänglich
MODE_APPEND Wenn eine Datei vorhanden ist, fügen Sie hinzu

Wenn Sie mehrere Modi angeben möchten, können Sie auch mehrere Modi angeben, indem Sie Pipes verbinden. mode_private | mode_append

Konvertieren Sie anschließend die Zeichenfolge, die Sie in die Datei schreiben möchten, in ein Array vom Typ Byte und schreiben Sie sie mit `write ()` in den Stream.

fileOutputStream.write(str.getBytes());

Dateien aus dem Speicher lesen

Um eine Datei zu lesen, rufen Sie eine Instanz von "FileInputStream" mit der Methode "openFileInput ()" ab. Auf diese Weise können Sie den Stream öffnen.

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

inputstreamreaderLiest Bytes aus dem Stream und dekodiert sie in die angegebenen Zeichen. EsbufferedreaderSetzen Sie es ein und lesen Sie es Zeile für Zeile. Steigerung der UmwandlungseffizienzbufferedreaderInnerhalbinputstreamreaderEs scheint gut zu wickeln.

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

Beispielcode

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 * Speichern / Laden von Dateien in den internen Speicher
* Android * Speichern / Laden von Bildern in einen externen Speicher
* Android * Informationen zum Speichern / Lesen von Dateien in einem externen Speicher und mit Berechtigungen
Komprimieren Sie mehrere Dateien und laden Sie sie auf Android in Firebase Storage hoch.
Android-Laden Sie Bilddateien in den Azure Blob-Speicher in Java hoch
Datei zur JAR-Datei hinzufügen
Einführung in JAR-Dateien
Einführung in das Android-Layout