2009-09-30 27 views
5

Ứng dụng Android của tôi có một số tệp trong thư mục nội dung mà tôi muốn mở khi khởi động bằng cách liệt kê các tệp trong thư mục và mở từng tệp. Tôi đang cố gắng sử dụng AssetManager để làm điều này nhưng nó dường như không làm như tôi mong đợi. Mã mẫu của tôi ở bên dưới. Đây có phải là cách chính xác hoặc có cách nào tốt hơn để thực hiện việc này không?Tôi làm cách nào để có được danh sách thư mục tài nguyên từ ứng dụng Android của mình?

Và tôi đang sử dụng phương pháp sau để in ra cây thư mục nội dung.

void displayFiles (AssetManager mgr, String path) { 
    try { 
     String list[] = mgr.list(path); 
     if (list != null) 
      for (int i=0; i<list.length; ++i) 
       { 
        Log.v("Assets:", path +"/"+ list[i]); 
        displayFiles(mgr, path + list[i]); 
       } 
    } catch (IOException e) { 
     Log.v("List error:", "can't list" + path); 
    } 

} 

Từ phương pháp onCreate Hoạt động của tôi tôi làm như sau:

final AssetManager mgr = getAssets();  
displayFiles(mgr, "/assets"); 
displayFiles(mgr, "./assets"); 
displayFiles(mgr, "/"); 
displayFiles(mgr, "./"); 

nào mang lại cho tôi kết quả như sau

 
09-29 20:08:27.843: DEBUG/GFlash(6543): //AndroidManifest.xml 
09-29 20:08:27.954: DEBUG/GFlash(6543): //META-INF 
09-29 20:08:28.063: DEBUG/GFlash(6543): //assets 
09-29 20:08:28.233: DEBUG/GFlash(6543): //classes.dex 
09-29 20:08:28.383: DEBUG/GFlash(6543): //com 
09-29 20:08:28.533: DEBUG/GFlash(6543): //res 
09-29 20:08:28.683: DEBUG/GFlash(6543): //resources.arsc 

Cảm ơn trước!

John

Trả lời

13

Ugh. Vấn đề nằm trong phương thức displayFiles, nó thiếu dấu tách, "/", giữa thư mục và tên tệp. Xin lỗi nếu tôi lãng phí thời gian của bất cứ ai. Một phiên bản sửa chữa của displayFiles là dưới đây.

void displayFiles (AssetManager mgr, String path) { 
    try { 
     String list[] = mgr.list(path); 
     if (list != null) 
      for (int i=0; i<list.length; ++i) 
       { 
        Log.v("Assets:", path +"/"+ list[i]); 
        displayFiles(mgr, path + "/" + list[i]); 
       } 
    } catch (IOException e) { 
     Log.v("List error:", "can't list" + path); 
    } 

} 

John

+1

hãy đánh dấu câu hỏi của bạn như trả lời. – Matthias

+1

Tôi đã thử. Nó nói với tôi tôi không thể chấp nhận câu trả lời của riêng tôi cho đến ngày mai. –

+2

Điều này hiển thị tất cả nội dung trong thư mục gốc nhưng tôi thực sự không thể thấy bất kỳ tệp nào trong thư mục nội dung của mình, có bao giờ làm việc đó không? – schwiz

10

Để có đầy đủ đệ quy bạn có thể cập nhật phương pháp này như sau:

void displayFiles (AssetManager mgr, String path, int level) { 

    Log.v(TAG,"enter displayFiles("+path+")"); 
    try { 
     String list[] = mgr.list(path); 
     Log.v(TAG,"L"+level+": list:"+ Arrays.asList(list)); 

     if (list != null) 
      for (int i=0; i<list.length; ++i) 
       { 
        if(level>=1){ 
         displayFiles(mgr, path + "/" + list[i], level+1); 
        }else{ 
         displayFiles(mgr, list[i], level+1); 
        } 
       } 
    } catch (IOException e) { 
     Log.v(TAG,"List error: can't list" + path); 
    } 

} 

Sau đó, gọi với:

final AssetManager mgr = applicationContext.getAssets(); 
displayFiles(mgr, "",0);  
Các vấn đề liên quan