2009-09-30 168 views
5

我的Android應用程序在資產目錄中有一些文件,我想在啓動時打開這些文件,方法是列出目錄中的文件並打開每個文件。我試圖使用AssetManager來做到這一點,但似乎並沒有像我期望的那樣做。我的示例代碼如下。這是正確的方式還是有更好的方法來做到這一點?如何從我的Android應用程序獲取資源目錄列表?

,我使用下面的方法來打印出資產的目錄樹。

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

} 

從我活動的onCreate方法我執行以下操作:

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

這給了我下面的輸出

 
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 

提前感謝!

約翰

回答

13

呃。問題在於displayFiles方法,它缺少目錄和文件名之間的分隔符「/」。對不起,如果我浪費了任何人的時間。下面是一個更正的displayFiles版本。

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

} 

約翰

+1

請註明您的問題作爲回答。 – Matthias 2009-09-30 10:57:16

+1

我試過了。它告訴我,直到明天我才能接受我自己的答案。 – 2009-09-30 13:00:31

+2

這是顯示根文件夾中的所有東西,但我實際上看不到我的資產文件夾中的任何文件,從而無法使用它? – schwiz 2010-10-07 03:19:58

10

要充分遞歸您可以更新方法如下:

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

} 

然後調用具有:

final AssetManager mgr = applicationContext.getAssets(); 
displayFiles(mgr, "",0);  
相關問題