FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム »assets
このページの記事一覧

【Android】【Java】assets フォルダから画像ファイルを読み込む  


 assets フォルダからの画像読み込みも基本は「assets フォルダからテキストファイルを読み込む」と同じ。変更点はストリームを開いた後のデコーダーを、画像用に書き換えれば良いだけ。

//assets フォルダから、画像ファイルを読み込む
public static final Bitmap loadBitmapAsset(String fileName, Context context) throws IOException {
final AssetManager assetManager = context.getAssets();
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(assetManager.open(fileName));
return BitmapFactory.decodeStream(bis);
} finally {
try {
bis.close();
} catch (Exception e) {
//IOException, NullPointerException
}
}
}


//メインでは... (※例外処理は省略)
String fileName = "res/img/sample.jpg"; // "assets/res/img/sample.jpg" となる
Bitmap bitmap = loadBitmapAsset(fileName, this); //this は起動した Activity が良い(Context)

 例外処理は手抜きしてるので、必要あれば適当に。SDカードだろうが、内部ストレージだろうが、「ストリームを開く→デコード」すれば良いだけなので、応用はいくらでもできるだろう。


(関連記事)
【Android】assets フォルダからテキストファイルを読み込む
【Android】SDカードから画像ファイルを読み込む
【Android】内部ストレージから画像ファイルを読み込む
【Android】【Applet】【Java】テキストファイルの読み込み・保存 まとめ


スポンサーサイト

category: Android

thread: プログラミング

janre: コンピュータ

tag: 画像ファイル読み込み  assets 
tb: 0   cm: --

【Android】【Java】assets フォルダからテキストファイルを読み込む  


 今回は 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 機能を使ってデータを読み込み・保存する


category: Android

thread: プログラミング

janre: コンピュータ

tag: テキストファイル読み込み  assets 
tb: 0   cm: --


プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop