Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidのアセットフォルダからファイルを読み込む方法【サンプルコード付きで解説】

このチュートリアルでは、Androidアプリでアセット(assets)フォルダ内のファイルを扱う方法を、実際に動作するサンプルコードとともに段階的に解説します。

なお、アセットフォルダはAPKにパッケージ化される読み取り専用の領域であるため、実行時に新しいファイルを書き込むことはできません。そこで本記事では、アセットフォルダに配置したテキストファイルを読み込み、画面に表示するまでの一連の手順を紹介します。

ステップ1:新規プロジェクトを作成する

Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。

ステップ2:レイアウトファイルを編集する

res/layout/activity_main.xml に以下のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/btnReadFile"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_above="@id/textView"
        android:layout_marginBottom="15dp"
        android:text="Read File"/>
    <TextView
        android:id="@+id/textView"
        android:layout_centerInParent="true"
        android:textSize="16sp"
        android:textStyle="bold|italic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

ステップ3:Assetsフォルダを作成してテキストファイルを追加する

次に、新しいAssetsフォルダを作成し、その中にテキストファイルを配置します。

テキストファイルを作成するには、対象フォルダ上で右クリックし、「New」→「File」を選択して、ファイル名(ここでは Quotes.txt)を入力します。

ステップ4:MainActivity.java を実装する

src/MainActivity.java に以下のコードを追加します。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
    TextView textView;
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        button = findViewById(R.id.btnReadFile);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String string = "";
                InputStream inputStream = null;
                try {
                    inputStream = getAssets().open("Quotes.txt");
                    int size = inputStream.available();
                    byte[] buffer = new byte[size];
                    inputStream.read(buffer);
                    string = new String(buffer);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                textView.setText(string);
            }
        });
    }
}

ステップ5:AndroidManifest.xml を確認する

androidManifest.xml には以下のコードを記述します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

アプリを実行して動作を確認する

それでは、アプリケーションを実行してみましょう。ここでは、実機のAndroidスマートフォンがパソコンに接続されているものとします。Android Studioからアプリを実行するには、プロジェクト内のアクティビティファイルをいずれか開き、ツールバーの「Run」アイコンをクリックします。表示された選択肢から接続中のモバイルデバイスを選択すると、端末側に次のような画面が表示されます。

Androidのアセットフォルダからファイルを読み込む方法【サンプルコード付きで解説】

コードのポイント解説

getAssets()メソッドとは

getAssets() は、AssetManagerオブジェクトを取得するためのメソッドです。取得したAssetManagerの open() メソッドにファイル名を渡すことで、アセットフォルダ内のファイルへのInputStreamを取得できます。

ファイル読み込みの流れ

サンプルでは、available() でファイルサイズを取得し、そのサイズ分のバイト配列を確保したうえで read() によりデータを読み込み、new String(buffer) で文字列に変換しています。より堅牢な実装を目指す場合は、BufferedReaderやtry-with-resourcesを活用した読み込み方法も検討するとよいでしょう。

注意点

  • アセットフォルダ内のファイル名は大文字・小文字が区別されます。Quotes.txtquotes.txt は別のファイルとして扱われるため、指定ミスには注意してください。
  • 古いサポートライブラリ(android.support.v7)を使用している場合は、AndroidX移行後に androidx.appcompat.app.AppCompatActivity への置き換えが必要です。
  • アセットフォルダは読み取り専用です。実行時にファイルを保存したい場合は、内部ストレージや外部ストレージを利用しましょう。

まとめ

本記事では、Android Studioでアセットフォルダを作成し、テキストファイルを読み込んでTextViewに表示するまでの一連の手順を解説しました。設定ファイルやJSONデータなどをアプリに同梱したい場合、アセットフォルダは非常に便利な仕組みです。ぜひ実際にプロジェクトを作成して試してみてください。

  1. AndroidでEPUBファイルを開く方法|変換不要で電子書籍を読む4つのテクニック

    電子書籍(eBook)を読むのが好きなのに、AndroidスマホやタブレットでEPUBファイルが開けずに困っていませんか? もしそうなら、この記事はまさにあなたのためのものです。このガイドでは、EPUBファイルをPDFに変換することなく、Android端末でそのまま開いて読む方法を詳しく解説します。 まずは「EPUBとは何か」「PDFと何が違うのか」という基本から見ていきましょう。 EPUBファイル形式とは? EPUB(Electronic Publication)は、電子書籍の出版に使われる柔軟でインタラクティブなXMLベースのファイル形式です。デバイスや画面サイズに関係なく、「.epub」

  2. Androidでファイルを管理する方法|重複ファイルを削除してストレージをすっきり整理

    近年のスマートフォンは大容量ストレージを搭載しているため、Android端末にさまざまなデータを保存しがちです。しかし管理をおろそかにすると、蓄積されたファイルが乱雑になり、必要なときにすぐ見つけられなくなってしまいます。Androidには標準で「ファイルマネージャー」機能が搭載されており、設定からアクセスできます。また、メーカーによっては専用のファイル管理アプリがプリインストールされている場合もあります。 Androidのファイルマネージャーとは? スマートフォン内のファイルを整理するには、ファイルマネージャーアプリが欠かせません。Androidの設定画面に「ファイル」や「ファイルマネージャ