AssetManagerでフォルダを見分ける方法がわかりません

496 views
Skip to first unread message

たろサ

unread,
Jan 14, 2011, 3:18:17 PM1/14/11
to 日本Androidの会
 こんにちは、たろサです。

 下記のように、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

Ishii Kenzo

unread,
Jan 14, 2011, 7:05:27 PM1/14/11
to android-g...@googlegroups.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 からこのグループにアクセスしてください。
>
>

たろサ

unread,
Jan 14, 2011, 11:25:59 PM1/14/11
to android-g...@googlegroups.com
 こんにちは、たろサです。

 石井様、説明ありがとうございます。

> FileクラスのisDirectoryで可能だと思います。
 FileクラスのisDirectoryを、AssetManagerクラスに対して、どのように使え
ばいいのでしょうか。

 すいません。私にはわからないのです。

 以下のソースのここのところです。これでも動作はしていますが、きちんと
フォルダかどうかを見極めたほうが、すっきりするので、質問いたしました。


>> try{
>> is = as.open(folder+"/"+str);
>> } catch (Exception e) {
>> //エラーということは、きっと、フォルダに違いない。
>> Log.i("Error",e.toString());
>> //再起呼び出し
>> foldercopyall( folder+"/"+str );
>> is = null;
>> }

 すいません、教えてください。
 よろしくお願いします。

Ishii Kenzo

unread,
Jan 15, 2011, 1:57:23 AM1/15/11
to android-g...@googlegroups.com
すいません、適当な回答してしまいました。

てっきりAssetManagerからFileが取れるものだと思ってましたが、
InputStream等、低レベルなアクセスしかサポートしてないですね。

あるいはfile:///android_asset/で取れるかなと試してみましたが、無理のようでした。

簡単にサクッと調べる方法は無さそうに思います。


2011年1月15日13:25 たろサ <taro...@gmail.com>:

たろサ

unread,
Jan 15, 2011, 4:52:52 AM1/15/11
to android-g...@googlegroups.com
 たろサです。

> 簡単にサクッと調べる方法は無さそうに思います。

 石井様、回答ありがとうございます。

 簡単には、行かないんですね。
 了解しました。

 下記のソースでも動くので、これで対応したいと思います。

 ありがとうございました。

Reply all
Reply to author
Forward
0 new messages