Android内部ストレージの例チュートリアル

今日はAndroidの内部ストレージについて見ていきます。 Androidにはいくつかの構造化された方法がありますデータを保存するための。これには

このチュートリアルでは、Androidの内部ストレージを使用してファイルにデータを保存および読み込む方法について見ていきます。

Androidの内部ストレージ

Androidの内部ストレージは、デバイスのメモリ上にプライベートデータを保存することです。デフォルトでは、内部ストレージへのファイルの保存と読み込みはアプリケーションに対してのみプライベートであり、他のアプリケーションはこれらのファイルにアクセスすることはできません。ユーザーがアプリケーションをアンインストールすると、アプリケーションに関連付けられた内部ストレージに保存されているファイルも削除されます。ただし、一部のユーザーはルート化されたAndroidの携帯電話を使用しており、スーパーユーザーアクセスを取得しています。これらのユーザーは望むファイルを読み書きすることができます。

Android内部ストレージでのテキストファイルの読み書き

Androidは、JavaのI/OクラスからopenFileInputopenFileOutputを提供しています。これらを使用すると、ローカルファイルへの読み書きストリームの変更が可能です。

  • openFileOutput(): このメソッドは、ファイルを作成して保存するために使用されます。構文は以下の通りです:

    FileOutputStream fOut = openFileOutput("ファイル名",Context.MODE_PRIVATE);
    

    openFileOutput()メソッドはFileOutputStreamのインスタンスを返します。その後、writeメソッドを呼び出してデータをファイルに書き込むことができます。構文は以下の通りです:

    String str = "テストデータ";
    fOut.write(str.getBytes());
    fOut.close();
    
  • openFileInput():このメソッドは、ファイルを開いて読み取るために使用されます。FileInputStreamのインスタンスを返します。以下に構文が示されています:

    FileInputStream fin = openFileInput(file);
    

    その後、ファイルから1文字ずつ読み取り、それを印刷するためにreadメソッドを呼び出します。以下に構文が示されています:

    int c;
    String temp="";
    while( (c = fin.read()) != -1){
       temp = temp + Character.toString((char)c);
    }
    
    fin.close();
    

    上記のコードでは、文字列tempにファイルのすべてのデータが含まれています。

  • これらのメソッドはファイルパス(例:path/to/file.txt)を受け付けないことに注意してください。単純なファイル名のみを取ります。

Androidの内部ストレージプロジェクト構造

Android内部ストレージのサンプルコード

XMLレイアウトには、データをファイルに書き込むためのEditText、書き込みボタン、読み取りボタンが含まれています。なお、onClickメソッドは以下のようにXMLファイル内で定義されています:activity_main.xml

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:padding="5dp"
        android:text="Android Read and Write Text from/to a File"
        android:textStyle="bold"
        android:textSize="28sp" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="22dp"
        android:minLines="5"
        android:layout_margin="5dp">

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Write Text into File"
        android:onClick="WriteBtn"
        android:layout_alignTop="@+id/button2"
        android:layout_alignRight="@+id/editText1"
        android:layout_alignEnd="@+id/editText1" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Read Text From file"
        android:onClick="ReadBtn"
        android:layout_centerVertical="true"
        android:layout_alignLeft="@+id/editText1"
        android:layout_alignStart="@+id/editText1" />

</RelativeLayout>

MainActivityには、上記で説明したファイルへの読み書きの実装が含まれています。

package com.journaldev.internalstorage;


import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class MainActivity extends Activity {

    EditText textmsg;
    static final int READ_BLOCK_SIZE = 100;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textmsg=(EditText)findViewById(R.id.editText1);
    }

    // ファイルへのテキストの書き込み
    public void WriteBtn(View v) {
        // ファイルにテキストを追記
        try {
            FileOutputStream fileout=openFileOutput("mytextfile.txt", MODE_PRIVATE);
            OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
            outputWriter.write(textmsg.getText().toString());
            outputWriter.close();

            // ファイル保存メッセージの表示
            Toast.makeText(getBaseContext(), "File saved successfully!",
                    Toast.LENGTH_SHORT).show();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // ファイルからテキストを読み取る
    public void ReadBtn(View v) {
        // ファイルからテキストを読み込む
        try {
            FileInputStream fileIn=openFileInput("mytextfile.txt");
            InputStreamReader InputRead= new InputStreamReader(fileIn);

            char[] inputBuffer= new char[READ_BLOCK_SIZE];
            String s="";
            int charRead;

            while ((charRead=InputRead.read(inputBuffer))>0) {
                // charからstringへの変換
                String readstring=String.copyValueOf(inputBuffer,0,charRead);
                s +=readstring;
            }
            InputRead.close();
            textmsg.setText(s);
            

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ここでは、データが内部ストレージに正常に書き込まれた場合にはトーストが表示され、データがファイルから読み取られた場合には同じEditTextに表示されます。以下の画像は、プロジェクトの出力を示しています。画像は、テキストが内部ストレージに書き込まれ、Readをクリックすると同じEditTextにテキストが表示される様子を表しています。

ファイルはどこにありますか?

実際にファイルを表示するには、ツールからAndroid Device Monitorを開きます。ファイルは以下の画像で示されるように、data->data->{パッケージ名}->filesフォルダにあります:ファイル「mytextfile.txt」はプロジェクトのパッケージ名であるcom.journaldev.internalstorageにあります。以下のように表示されます:以下のリンクからAndroid内部ストレージの例プロジェクトをダウンロードしてください。

Android内部ストレージの例プロジェクトをダウンロード

Source:
https://www.digitalocean.com/community/tutorials/android-internal-storage-example-tutorial