2009-09-30 22 views
5

Mi aplicación de Android tiene algunos archivos en el directorio de activos que deseo abrir al inicio al listar los archivos en el directorio y abrir cada uno. Estoy tratando de usar el AssetManager para hacer esto, pero no parece hacer lo que esperaría. Mi código de muestra está debajo. ¿Es esta la manera correcta o hay una mejor manera de hacer esto?¿Cómo puedo obtener una lista de recursos de directorio de mi aplicación de Android?

Y estoy usando el siguiente método para imprimir el árbol del 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 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 el siguiente resultado

 
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): //assets 
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 de antemano!

John

Respuesta

13

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

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

+1

Por favor marque su pregunta respondida. – Matthias

+1

Lo intenté. Me dice que no puedo aceptar mi propia respuesta hasta mañana. –

+2

Esto muestra todas las cosas en la carpeta raíz, pero en realidad no puedo ver ninguno de los archivos en la carpeta de mis activos. ¿Alguna vez lo he hecho funcionar? – schwiz

10

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

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); 
    } 

} 

a continuación, llamar a:

final AssetManager mgr = applicationContext.getAssets(); 
displayFiles(mgr, "",0);  
Cuestiones relacionadas