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.
Die Entwicklungsumgebung ist wie folgt. *Android Studio 4.0.1 *targetSdkVersion 28 *Google Nexus 5x
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.
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());
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");
inputstreamreader
Liest Bytes aus dem Stream und dekodiert sie in die angegebenen Zeichen. Esbufferedreader
Setzen Sie es ein und lesen Sie es Zeile für Zeile. Steigerung der Umwandlungseffizienzbufferedreader
Innerhalbinputstreamreader
Es 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;
}
}
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