2011-05-02 13 views
20

Ho un'intera struttura di cartelle che voglio copiare dalla cartella delle mie risorse. Tuttavia, mContext.getAssets(). Open() sembra voler solo un nome file in modo che possa restituire un InputStream, che è adatto solo per copiare un singolo file. Quello di cui ho bisogno è un file creato dalla cartella nella mia cartella delle risorse in modo da poter ricevere tutti i file e le cartelle e copiarli tutti.Come ottenere il percorso della cartella delle risorse Android nel pacchetto dell'applicazione

Qualcuno sa come ottenere il percorso della cartella delle risorse in modo che possa creare un oggetto File?

Modifica: dopo alcuni studi risulta che non è possibile accedere ai file nelle risorse/e raw/cartelle con percorsi assoluti per poter creare un oggetto File. Probabilmente ha a che fare con la crittografia del pacchetto dell'app. Spero che qualcuno possa dimostrarmi che non sbaglio!

montaggio finale: ho finito per creare un array di stringhe per contenere i file di asset aggiuntivi:

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

Ho poi iterata attraverso questa copia ogni file singolarmente secondo i mContext.getAssets() open() per. ottenere l'InputStream. Non penso sia attualmente possibile iterare attraverso una cartella nelle risorse usando le normali operazioni su File.

+0

Che cosa hai provato? Vedi: http://www.wiseandroid.com/post/2010/06/14/Android-Beginners-Intro-to-Resources-and-Assets.aspx – f20k

+0

Sì, questo descrive esattamente quello che ho fatto. – cdavidyoung

risposta

3

È possibile spostare la cartella nella cartella/raw? Allora si potrebbe utilizzare:

com.your.package:raw/yourFile 

Ti piace questa:

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

Ed ecco qualcuno che fa con la cartella di asset:

Android Assets with sub folders

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

Sembra promettente. Ho intenzione di fare un tentativo. Tornerò con i risultati. Grazie! – cdavidyoung

+0

Anche la cartella raw non sembra consentire riferimenti di percorso assoluti. Almeno non sono stato in grado di capirlo ... – cdavidyoung

+0

Certo risposta modificata – Blundell

-5

Usa file:///android_asset per l'accesso alla risorsa cartella e quindi puoi sempre dare la tua sottocartella lì.

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

Ho paura di non capire come usare "file: /// android_asset". Puoi metterlo sotto forma di "File file = new File (...);"? – cdavidyoung

+0

Ottieni l'assetmanager, ottieni l'assetfiledescriptor, ottieni il fileescursore da assetfiledescriptor. – yogsma

+8

Ma come convertire un FileDescriptor in un file? – 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

risposta perfetta grazie :) +1 –

Problemi correlati