エミュレータにテスト・ファイルを送りたい。
WebからDownLoadする、コンソールからwgetする…?
いろいろやり方はあるけど、リソースからコピーできると便利。
「デモファイルのインストール」なんて機能にもなるしね。
やり方はシンプルなコピーとそう変わりがない。
リソースのpathを取得するには、Resources class を使うのだが。
このResources からは、InputStream しか生成できない。
そのため、FileChannel は使えないんだ。
下記サンプルでは、SDカードのルートにファイルをコピーしている。
public void cpResTo_SD( Context context, int res_id, String fName ) {
// Copy先の取得
File cpFile = new File( Environment.getExternalStorageDirectory().getPath()+"/" +fName );
// Log.d( "TEST", "copy to :" +cpFile.getPath() );
// exec copy
try{
Resources res = context.getResources();
InputStream is = res.openRawResource( res_id );
OutputStream os = new FileOutputStream( cpFile );
byte[] buffer = new byte[ 1024*4 ]; // 1024*4 = DEFAULT BUFFER SIZE
int r = 0;
while( -1 != ( r = is.read(buffer)) ){
os.write( buffer, 0, r );
}
is.close();
os.close();
}catch( Exception ex ){
Log.d( "TEST", "/res -> copy error..." );
}
//--
}
DEFAULT BUFFER SIZE が 1024*4 となっているのは、ファイルの最小サイズが4kだから。
これより大きくても、小さくても問題ないけど、4kにしておくのが一番、効率がいい。
注意点としては、リソースの場所があげられる。
たとえばテキスト・ファイルなんかを、/values に格納するとeclipse でエラーとなる。
/raw なんかを作り、そこに格納しておく必要がある。


![著作権フリー背景素材集[家]](http://img.dlsite.jp/modpub/images2/work/doujin/RJ089000/RJ088095_img_mini.jpg)





migimaki.com











![著作権フリー背景素材集[家]](http://img.dlsite.jp/modpub/images2/work/doujin/RJ089000/RJ088095_img_sam.jpg)
右巻きソフトウェア
