2013-02-01 115 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 –