下記のように、assetsのあるフォルダ以下のデータを下位フォルダも含めてす
べてSDカードにコピーしたいと思うのですが、ファイルかフォルダかを見分ける
やり方がわかりません。
どのようにすればいいのでしょうか。教えてください。
よろしくお願いします。
-----
//**************************************************
// assetsのfolder以下のファイルをすべてコピーする
//**************************************************
private void foldercopyall(String folder) {
AssetManager as = getResources().getAssets();
String[] luaridafiles;
try {
File SDfolder = new File(prSDCardDrive + "/" + folder );
//フォルダが無ければ、フォルダを作ります
if( !SDfolder.exists()){ SDfolder.mkdir(); }
luaridafiles = as.list(folder);
int DEFAULT_BUFFER_SIZE = 1024 * 4;
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
InputStream is = null;
for (String str : luaridafiles) {
try{
is = as.open(folder+"/"+str);
} catch (Exception e) {
//エラーということは、きっと、フォルダに違いない。
Log.i("Error",e.toString());
//再起呼び出し
foldercopyall( folder+"/"+str );
is = null;
}
if( is==null ){ continue; }
//openできたよ。
String toFile = prSDCardDrive + "/" + folder + "/" + str;
File outfile = new File(toFile);
OutputStream output = new FileOutputStream(outfile);
int n = 0;
while (-1 != (n = is.read(buffer))) {
output.write(buffer,0,n);
}
output.flush();
output.close();
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
------
--
山本三七男 (Minao Yamamoto) ---------------- ハンドル:たろサ -----
E-Mail: taro...@gmail.com
対象がディレクトリかどうか判別するのは、
FileクラスのisDirectoryで可能だと思います。
http://developer.android.com/reference/java/io/File.html#isDirectory()
2011年1月15日5:18 たろサ <taro...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>
石井様、説明ありがとうございます。
> FileクラスのisDirectoryで可能だと思います。
FileクラスのisDirectoryを、AssetManagerクラスに対して、どのように使え
ばいいのでしょうか。
すいません。私にはわからないのです。
以下のソースのここのところです。これでも動作はしていますが、きちんと
フォルダかどうかを見極めたほうが、すっきりするので、質問いたしました。
>> try{
>> is = as.open(folder+"/"+str);
>> } catch (Exception e) {
>> //エラーということは、きっと、フォルダに違いない。
>> Log.i("Error",e.toString());
>> //再起呼び出し
>> foldercopyall( folder+"/"+str );
>> is = null;
>> }
すいません、教えてください。
よろしくお願いします。
てっきりAssetManagerからFileが取れるものだと思ってましたが、
InputStream等、低レベルなアクセスしかサポートしてないですね。
あるいはfile:///android_asset/で取れるかなと試してみましたが、無理のようでした。
簡単にサクッと調べる方法は無さそうに思います。
2011年1月15日13:25 たろサ <taro...@gmail.com>:
> 簡単にサクッと調べる方法は無さそうに思います。
石井様、回答ありがとうございます。
簡単には、行かないんですね。
了解しました。
下記のソースでも動くので、これで対応したいと思います。
ありがとうございました。