2011-05-02 15 views
20

Tengo toda una estructura de carpetas que quiero copiar desde la carpeta de mis activos. Sin embargo, el mContext.getAssets(). Open() parece querer solo un nombre de archivo para que pueda devolver un InputStream, que solo es adecuado para copiar un único archivo. Lo que necesito es un archivo creado a partir de la carpeta en la carpeta de mis activos para poder recurrir a través de todos los archivos y carpetas y copiarlos todos.Cómo obtener la ruta a la carpeta de activos de Android en el paquete de la aplicación

¿Alguien sabe cómo obtener la ruta a la carpeta de activos para que pueda crear un objeto de archivo?

Editar: Después de algunos estudios, parece que no se puede acceder a los archivos en los activos/y en bruto/carpetas con rutas absolutas para poder crear un objeto Archivo. Probablemente tiene que ver con el cifrado del paquete de la aplicación. ¡Espero que alguien pueda demostrarme que estoy equivocado!

edición final: Terminé la creación de una matriz de cadenas para contener los archivos de activos adicionales:

private static final String[] DEFAULT_ALBUM_FILES = 
    {INTRO_TO_FLASHUM_DIR+"03 Never Can Say Goodbye.m4a", 
    INTRO_TO_FLASHUM_DIR+"11 Bossa Baroque.m4a", 
    INTRO_TO_FLASHUM_DIR+"intro fling.3gp"}; 

entonces iterado a través de esta copia cada archivo de forma individual utilizando los mContext.getAssets() open() para. obtener el InputStream. No creo que actualmente sea posible iterar a través de una carpeta en los activos usando las operaciones normales de File.

+0

¿Qué has intentado? Ver: http://www.wiseandroid.com/post/2010/06/14/Android-Beginners-Intro-to-Resources-and-Assets.aspx – f20k

+0

Sí, esto describe exactamente lo que hice. – cdavidyoung

Respuesta

3

¿Podría mover la carpeta a su carpeta/raw? Posteriormente, se podría utilizar:

com.your.package:raw/yourFile 

De esta manera:

int resourceId = context.getResources().getIdentifier("com.your.package:raw/somefile.txt"); 
File f = new File(context.getResources().openRawResource(resourceId)); 

Y aquí hay alguien haciendo con la carpeta de activos:

Android Assets with sub folders

InputStream is = getAssets().open("subfolder/somefile.txt"); 
+0

Esto parece prometedor. Voy a intentarlo. Volveré con los resultados. ¡Gracias! – cdavidyoung

+0

La carpeta sin formato tampoco parece permitir referencias absolutas de ruta. Al menos no he sido capaz de resolverlo ... – cdavidyoung

+0

Respuesta segura editada – Blundell

-5

Uso file:///android_asset para acceder al activo carpeta y luego siempre puede dar su subcarpeta allí.

AssetManager assetManager = null; // null ??? Get the AssetManager here. 
     AssetFileDescriptor assetFileDescriptor = null; 
     try{ 
      assetFileDescriptor = assetManager.openFd("file:///android_asset/yourfolder/file"); 
       FileDescriptor fd = assetFileDescriptor.getFileDescriptor(); 
     } catch (Exception e){} 
+0

Me temo que no entiendo cómo usar "file: /// android_asset". ¿Puedes poner esto en la forma de "Archivo archivo = nuevo Archivo (...);"? – cdavidyoung

+0

Obtenga el assetmanager, obtenga el assetfiledescriptor, obtenga el descriptor de archivo desde assetfiledescriptor. – yogsma

+8

Pero, ¿cómo convertir un FileDescriptor a un archivo? – cdavidyoung

4
  AssetManager am = con.getAssets();//u have get assets path from this code 

     InputStream inputStream = null; 

     inputStream = am.open("file.xml"); 

o

String file_name="ur.xml" 

inputStream = am.open("foldername/"+ur); 
+0

respuesta perfecta gracias :) +1 –

Cuestiones relacionadas