2013-04-26 10 views
24

Ho alcune cartelle con file HTML nella cartella "assets" nel mio progetto Android. Devo mostrare questi file HTML dalle sottocartelle delle risorse in un elenco. Ho già scritto del codice per creare questa lista.Elenco dei file nella cartella delle risorse e nelle relative sottocartelle

lv1 = (ListView) findViewById(R.id.listView); 
// Insert array in ListView 

// In the next row I need to insert an array of strings of file names 
// so please, tell me, how to get this array 

lv1.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, filel)); 
lv1.setTextFilterEnabled(true); 
// onclick items in ListView: 
lv1.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
     //Clicked item position 
     String itemname = new Integer(position).toString(); 
     Intent intent = new Intent(); 
     intent.setClass(DrugList.this, Web.class); 
     Bundle b = new Bundle(); 
     //I don't know what it's doing here 
     b.putString("defStrID", itemname); 
     intent.putExtras(b); 
     //start Intent 
     startActivity(intent); 
    } 
}); 

risposta

56
private boolean listAssetFiles(String path) { 

    String [] list; 
    try { 
     list = getAssets().list(path); 
     if (list.length > 0) { 
      // This is a folder 
      for (String file : list) { 
       if (!listAssetFiles(path + "/" + file)) 
        return false; 
       else { 
        // This is a file 
        // TODO: add file name to an array list 
       } 
      } 
     } 
    } catch (IOException e) { 
     return false; 
    } 

    return true; 
} 

chiamate le listAssetFiles con il nome della cartella principale della vostra cartella di risorsa.

listAssetFiles("root_folder_name_in_assets"); 

Se la cartella principale è la cartella risorsa quindi chiamare con

listAssetFiles("");  
+0

che cos'è mContext? –

+0

se si esegue questa operazione da un'attività o un servizio, quindi mContext = getApplicationContext(); o mContext = ActivityName.this; Inoltre puoi scartarlo. – Kammaar

+0

È Oggetto contesto – Kammaar

14

provare questo che funzionerà nel tuo caso

f = getAssets().list(""); 
for(String f1 : f){ 
    Log.v("names",f1); 
} 

È possibile che questo frammento di codice mostrerà il contenuto della radice del risparmio.

Per esempio ... se al di sotto è la struttura patrimoniale ..

assets 
|__Dir1 
|__Dir2 
|__File1 

uscita del frammento sarà .... Dir1 Dir2 File1

Se è necessario il contenuto di la Directory Dir1

Passare il nome di Directory nella funzione elenco.

f = getAssets().list("Dir1"); 
+1

Ho modificato questo codice perché Eclipse mostra errori. 'String [] f = null; \t \t try { \t \t \t f = getAssets(). List (""); \t \t} catch (IOException e) { \t \t \t // TODO generato automaticamente blocco catch \t \t \t e.printStackTrace(); \t \t} \t per (String f1: f) { \t Log.v ("nomi", F1); \t} a questo –

+1

E come risultato - emulatore mi mostra 4 elementi elenco: droghe, immagini, suoni, webkit –

+1

Ya mostra che ... ma passare il nome della directory youtlr all'interno di asset può aiutarti a sbarazzarti di esso passare all'interno la parentesi la cartella principale e tutto il suo contenuto saranno elencati ...... come getAssets(). lista ("farmaci"); – cafebabe1991

0

Hope Questa Aiuto:

seguente codice copierà tutta la cartella e il suo contenuto e il contenuto della sottocartella per sdcard location:

private void getAssetAppFolder(String dir) throws Exception{ 

    { 
     File f = new File(sdcardLocation + "/" + dir); 
     if (!f.exists() || !f.isDirectory()) 
      f.mkdirs(); 
    } 
    AssetManager am=getAssets(); 

    String [] aplist=am.list(dir); 

    for(String strf:aplist){ 
     try{ 
      InputStream is=am.open(dir+"/"+strf); 
      copyToDisk(dir,strf,is); 
     }catch(Exception ex){ 


      getAssetAppFolder(dir+"/"+strf); 
     } 
    } 



} 


public void copyToDisk(String dir,String name,InputStream is) throws IOException{ 
    int size; 
     byte[] buffer = new byte[2048]; 

     FileOutputStream fout = new FileOutputStream(sdcardLocation +"/"+dir+"/" +name); 
     BufferedOutputStream bufferOut = new BufferedOutputStream(fout, buffer.length); 

     while ((size = is.read(buffer, 0, buffer.length)) != -1) { 
      bufferOut.write(buffer, 0, size); 
     } 
     bufferOut.flush(); 
     bufferOut.close(); 
     is.close(); 
     fout.close(); 
} 
Problemi correlati