【Android】【Java】assets フォルダからテキストファイルを読み込む 
2014/06/19 Thu [edit]
今回は Android プロジェクトでのもう1つのリソース保管場所「assets」フォルダからテキストファイルを読み込んでみる。前回の「raw」フォルダとの大きな違いは、assets フォルダに関しては、ADT がリソースIDを割り振らないという点がある。つまり「R.id.~」「R.raw.~」のような int 定数では表現できないという事だ。しかし逆に言えば、「res/raw/」フォルダと違って、自由にフォルダ階層を作れるわけで(ADT が管理している場合、自由にフォルダ名などは決められない)、慣れてしまえば assets の方が汎用性は高いだろう。読み込み方も AssetManager という専用のオブジェクトが Android システムにはあるので、非常に簡単だ。
ストリームからのテキストファイル読み込みは例によって以前作ったものをそのまま使う。。
loadText() - ストリームからテキストファイルを読み込む
手順を簡単に説明すると、次のようになる。
1.AssetManager を取得する。
2.assets フォルダの入力ストリームを開く。
3.ストリームからテキストエンコーディングして文字列を返す。
●assets フォルダの入力ストリームを開く部分 [Android 用]
//設定値
private static final String DEFAULT_ENCORDING = "UTF-8"; //デフォルトのエンコード
//assets フォルダから、テキストファイルを読み込む(Android 用)
public static final String loadTextAsset(String fileName, Context context) throws IOException {
final AssetManager assetManager = context.getAssets();
InputStream is = assetManager.open(fileName);
return loadText(is, DEFAULT_ENCORDING);
}
//メインでは... (※例外処理は省略)
String fileName = "res/data/sample.txt"; // "assets/res/data/sample.txt" となる
String text = loadTextAsset(fileName, this); //this は起動した Activity が良い(Context)
System.out.println(text); //Log.d("tag", text); でも良い
assets フォルダ以下に 「res/data/」 とフォルダを作った場合、ファイル名は "res/data/sample.txt" で表現できる。これは一般的なファイルシステムと同じだ。だから他のプラットフォームへの移植も考慮に入れた場合、初めからここをリソースフォルダとしてコードを書いた方が流用性は高い。ただし、Android 用の言語切り替えなどのローカライズ機能は使えなくなってしまうけどね。ADT の管理下から外れる分、自由に使えるが、Android に初めからビルトインされている機能も管轄外と考えれば良いね。どちらを使うかは自分次第(笑)。
●ストリームからテキストエンコーディングして読み込む部分 [汎用](- loadText() ※以前作ったものを使い回し)
//設定値
private static final int DEFAULT_READ_LENGTH = 8192; //一度に読み込むバッファサイズ
//ストリームから読み込み、バイト配列で返す
public static final byte[] readStream(InputStream inputStream, int readLength) throws IOException {
final ByteArrayOutputStream byteStream = new ByteArrayOutputStream(readLength); //一時バッファのように使う
final byte[] bytes = new byte[readLength]; //read() 毎に読み込むバッファ
final BufferedInputStream bis = new BufferedInputStream(inputStream, readLength);
try {
int len = 0;
while ((len = bis.read(bytes, 0, readLength)) > 0) {
byteStream.write(bytes, 0, len); //ストリームバッファに溜め込む
}
return byteStream.toByteArray(); //byte[] に変換
} finally {
try {
byteStream.reset(); //すべてのデータを破棄
bis.close(); //ストリームを閉じる
} catch (Exception e) {
//IOException
}
}
}
//ストリームから読み込み、テキストエンコードして返す
public static final String loadText(InputStream inputStream, String charsetName)
throws IOException, UnsupportedEncodingException {
return new String(readStream(inputStream, DEFAULT_READ_LENGTH), charsetName);
}
次は Android の内部ストレージからテキストファイルを読み込んでみよう。
テキストファイルの読み込みや保存をまとめたページは→こちら
(関連記事)
【Android】assets フォルダから画像ファイルを読み込む
【Android】res/raw リソースフォルダからテキストファイルを読み込む
【Android】内部ストレージからテキストファイルを読み込む
【Android】内部ストレージにテキストファイルを保存する
【Android】SDカードからテキストファイルを読み込む
【Android】SDカードにテキストファイルを保存する
【汎用】ストリームからテキストファイルを読み込む(ストリームから読み込み、テキストエンコードして返す)
【汎用】ローカルシステム(Windows 等)から、テキストファイルを読み込む
【Applet/汎用】URL経由でWebサーバ上のテキストファイルを読み込む
【Applet】jar 内リソースからテキストファイルを読み込む
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ
【Android】Preference 機能を使ってデータを読み込み・保存する
- 関連記事
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/120-1530b293
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |