2013-02-01 267 views
4

如何獲得.json配置文件的所有列表,這些文件不在SD卡上,而是位於我的包中?圖像上的貝婁顯示了我想要訪問的文件夾中的文件。這個想法如下:當應用程序啓動時,我想獲取配置文件的列表,它們的路徑並顯示給測試人員以選擇連接到哪個服務器。我怎樣才能做到這一點?我在尋找PackageManagerAssetManager,但沒有結果。android從包中獲取文件列表

當我把文件夾配置到文件夾資產,這段代碼遊戲我可用的配置列表,但我怎麼能得到他們完整的路徑來閱讀它們?

AssetManager am = getAssets(); 
String s = getPackageName(); 
Resources tmp = pm.getResourcesForApplication(s); 
String [] arr = am.list("configs2"); 

snapshot

回答

1

我終於解決了我的問題。這是我的項目的結構: enter image description here

  1. 要想從應用程序包的文件列表,你需要把你想進入的資產文件夾中的所有文件。這裏是代碼:

    private ArrayList getPackageConfigList() { AssetManager am = getAssets(); String [] arr = null; 嘗試 { arr = am.list(folder); } 趕上(IOException的發送){e.printStackTrace();}

      ArrayList<String> flist = new ArrayList<String>(); 
    
          for (int i=0; i<arr.length; i++) 
          { 
           flist.add(PKG + arr[i]); 
           Log.d(tag, PKG+ arr[i]); 
          } 
    
          return flist; 
         } 
    
  2. 要讀取從包文件混凝土:

私人字符串loadConfigFromPackage(字符串文件名) { AssetManager am = getAssets(); InputStream in = null; String result = null;

try 
{ 
    //open file, read to buffer, convert to string 
    in = am.open(folder + "/" + fileName); 
    int size = in.available(); 
    byte[] buffer = new byte[size]; 
    in.read(buffer); 
    in.close(); 
    result = new String(buffer); 
} 
catch(IOException e) 
{ 
    e.printStackTrace(); 
} 
finally 
{ 
    try 
    { 
     in.close(); 
    } 
    catch(Exception ex){} 
} 
return result; 

}

+1

很高興你解決了你的問題!雖然不建議將它作爲字節緩衝區讀取,但使用BufferedReader更安全: 'BufferedReader reader = new BufferedReader(new InputStreamReader(input_stream))'然後使用'reader.readLine() –

1

做我用以下命令類似的事情:

InputStream is = context.getResources().openRawResource(R.raw.raw_data_file);

該文件raw_data_file是在路徑res/raw/raw_data_file.txt。然後您可以像使用InputStream一樣正常地讀取文件。我相信你可以用你的文件做類似的事情,但通常我會把所有資源放在res(ources)文件夾中。

+0

感謝。我能以某種方式從當前位置的「configs」文件夾中獲取文件嗎? – yozhik

+0

試試'am.open(configs/fileName)',它再次返回一個InputStream –