¿Cómo puedo obtener una lista de directorios de recursos de mi aplicación para Android?

Mi aplicación de Android tiene algunos archivos en el directorio de activos que quiero abrir al iniciar, enumerando los archivos del directorio y abriéndolos. Estoy tratando de utilizar el AssetManager para hacer esto, pero no parece hacer lo que esperaba. Mi código de ejemplo está abajo. ¿Es esta la forma correcta o hay una mejor manera de hacer esto?

Y estoy usando el siguiente método para imprimir el árbol de directorio de activos.

void displayFiles (AssetManager mgr, String path) { try { String list[] = mgr.list(path); if (list != null) for (int i=0; i<list.length; ++i) { Log.v("Assets:", path +"/"+ list[i]); displayFiles(mgr, path + list[i]); } } catch (IOException e) { Log.v("List error:", "can't list" + path); } } 

Desde el método onCreate de mi actividad, hago lo siguiente:

 final AssetManager mgr = getAssets(); displayFiles(mgr, "/assets"); displayFiles(mgr, "./assets"); displayFiles(mgr, "/"); displayFiles(mgr, "./"); 

Que me da la siguiente salida

 09-29 20: 08: 27.843: DEBUG / GFlash (6543): //AndroidManifest.xml 
 09-29 20: 08: 27.954: DEBUG / GFlash (6543): // META-INF
 09-29 20: 08: 28.063: DEBUG / GFlash (6543): // activos
 09-29 20: 08: 28.233: DEBUG / GFlash (6543): //classes.dex 
 09-29 20: 08: 28.383: DEBUG / GFlash (6543): // com
 09-29 20: 08: 28.533: DEBUG / GFlash (6543): // res
 09-29 20: 08: 28.683: DEBUG / GFlash (6543): //resources.arsc

¡Gracias por adelantado!

John

Ugh. El problema estaba en el método displayFiles, faltaba el separador, "/", entre el directorio y el nombre de archivo. Lo siento si perdí el tiempo de nadie. Una versión corregida de displayFiles está abajo.

 void displayFiles (AssetManager mgr, String path) { try { String list[] = mgr.list(path); if (list != null) for (int i=0; i<list.length; ++i) { Log.v("Assets:", path +"/"+ list[i]); displayFiles(mgr, path + "/" + list[i]); } } catch (IOException e) { Log.v("List error:", "can't list" + path); } } 

John

Para ser completamente recursivo puede actualizar el método de la manera siguiente:

 void displayFiles (AssetManager mgr, String path, int level) { Log.v(TAG,"enter displayFiles("+path+")"); try { String list[] = mgr.list(path); Log.v(TAG,"L"+level+": list:"+ Arrays.asList(list)); if (list != null) for (int i=0; i<list.length; ++i) { if(level>=1){ displayFiles(mgr, path + "/" + list[i], level+1); }else{ displayFiles(mgr, list[i], level+1); } } } catch (IOException e) { Log.v(TAG,"List error: can't list" + path); } } 

Luego llame con:

 final AssetManager mgr = applicationContext.getAssets(); displayFiles(mgr, "",0); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.