2013-04-26 4 views
24

Ich habe einige Ordner mit HTML-Dateien im Ordner "Assets" in meinem Android-Projekt. Ich muss diese HTML-Dateien aus den Unterordnern der Assets in einer Liste anzeigen. Ich habe bereits einen Code geschrieben, um diese Liste zu erstellen.Liste der Dateien im Ordner "Assets" und seinen Unterordnern

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

Antwort

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

Rufen Sie die listAssetFiles mit dem Stammordner Namen Ihres Asset-Ordner.

listAssetFiles("root_folder_name_in_assets"); 

Wenn der Stammordner ist der Asset-Ordner, um ihn dann rufen Sie mit

listAssetFiles("");  
+0

Was ist mContext? –

+0

Wenn Sie dies von einer Aktivität oder einem Service aus tun, dann mContext = getApplicationContext(); oder mContext = ActivityName.this; Sie können es auch ablegen. – Kammaar

+0

Es ist Context-Objekt – Kammaar

14

versuchen, dies wird

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

Die obige Snippet in Ihrem Fall wird der Inhalt des Vermögens Wurzel zeigen.

Zum Beispiel ... unten, wenn die Vermögensstruktur ..

assets 
|__Dir1 
|__Dir2 
|__File1 

Ausgang des Snippet wird .... Dir1 Dir2 File1

Wenn Sie den Inhalt benötigen das Verzeichnis Dir1

Übergeben Sie den Namen des Verzeichnisses in der Listenfunktion.

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

Ich habe diesen Code bearbeitet, weil Eclipse Fehler anzeigt. 'String [] f = null; \t \t versuchen { \t \t \t f = getAssets(). Liste (""); \t \t} catch (IOException e) { \t \t \t // TODO Automatisch generierte Fangblock \t \t \t e.printStackTrace(); \t \t für (String f1: f) { \t Log.v ("Namen", f1); \t} zu diesem –

+1

Und als Ergebnis - Emulator zeigt mir 4 Artikel Liste: Drogen, Bilder, Sounds, Webkit –

+1

Ya es zeigt, dass .. aber die Weitergabe des Namens des youtlr Verzeichnisses in Asset kann Ihnen helfen, es los zu lassen Pass innen In der Klammer wird Ihr Elternordner und sein gesamter Inhalt aufgelistet ...... wie getAssets(). list ("Drogen"); – cafebabe1991

0

Hoffen, dass diese Hilfe:

folgenden Code werden alle Ordner kopieren und es ist Inhalt und Inhalt der Unter Ordner 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(); 
}