2013-04-26 3 views
24

У меня есть папки с файлами HTML в папке «assets» в моем проекте Android. Мне нужно показать эти файлы HTML из подпапок активов в списке. Я уже написал код о создании этого списка.Список файлов в папке с ресурсами и вложенных папках

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

ответ

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

Вызовите listAssetFiles с именем корневой папке папки активов.

listAssetFiles("root_folder_name_in_assets"); 

Если корневая папка это папка актива затем вызвать его с

listAssetFiles("");  
+0

, что такое mContext? –

+0

, если вы делаете это из действия или службы, то mContext = getApplicationContext(); или mContext = ActivityName.this; Также вы можете отказаться от него. – Kammaar

+0

Это объект контекста – Kammaar

14

попробовать это будет работать в вашем случае

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

выше фрагмент кода будет отображаться содержимое корня активов.

Например ... если ниже структура активов ..

assets 
|__Dir1 
|__Dir2 
|__File1 

выход сниппета будет .... Dir1 Dir2 File1

Если вам нужно содержимое Справочник Dir1

Передайте имя Справочника в функции списка.

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

Я отредактировал этот код, потому что Eclipse показывает ошибки. 'String [] f = null; \t \t try { \t \t \t f = getAssets(). List (""); \t \t} поймать (IOException е) { \t \t \t // TODO автоматическая генерация улова Блокировать \t \t \t e.printStackTrace(); \t \t} \t для (строка f1: f) { \t Log.v ("names", f1); \t} 'to this –

+1

И как результат - эмулятор показывает мне 4 элемента списка: наркотики, изображения, звуки, webkit –

+1

Ya это показывает, что ... но прохождение имени каталога youtlr внутри актива может помочь вам избавиться от него. скопируйте свою родительскую папку и все ее содержимое ... как getAssets(). list («drugs»); – cafebabe1991

0

Надежда Это помогло:

следующего кода будет копировать всю папку, и это содержание и содержание подпапки в sdcard:

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(); 
} 
Смежные вопросы