如何在Android开发中对properties文件进行读取

如何在Android开发中对properties文件进行读取,第1张

android中读取properties就简单多了,不过不建议用properties 因为apk是要打包的,也就是说,properties文件要在你的应用程序发布之前打包进去

读取方式:

1. 将 properties文件复制到res/raw目录下

2. 调用android api 获取raw下的输入流

3.Properties pr = new Properties()

try {

   pr.load(getResources().openRawResource(R.raw.test))

//resources中打开一个输入流,这个输入流就是你的properties文件

} catch (IOException e) {

   e.printStackTrace()

}

  之前看过大神的 美团组件化方案 ,其中提到了通过servicelaoder进行解耦的思路,主要是通过配置接口及其实现类的方式坐到接口隔离作用,本文主要是实现此思路并延伸出通过加载自定义properties文件获取参数配置信息

  通过查看ServiceLoader源码可知,ServiceLoader是通过加载META-INF/services/路径下的接口实现类,加载方式是通过读取配置文件并通过反射的方式获取类的实例

1.配置文件读取,获取文件流

其中PREFIX = "META-INF/services/"

由此可见加载路径是META-INF文件夹下面的文件

2.通过流获取实现类全路径

其中parseLine方法里面是做了类全路径名校验

思路:

  1.读取配置文件

  2.获取配置的类全名

  3.通过反射获取类的实例

  我们的配置文件将写在assets文件夹下

  通过查看apk包结构可以发现assets文件夹位置是与META-INF平级的,由此我们可以将系统的ServiceLoader加载文件路径改为assets路径

1.配置文件读取,获取文件流

2.通过流获取接口类与实现类的对应集合

  由于接口类与实现类是一对一关系,所以通过Map以键值对的方式存储接口类与实现类,在系统ServiceLoader做简单修改:

3.获取实现类

  在上一步已经获取了所有接口类和实现类的集合,在此通过接口类全名来获取实现类全名,并通过反射的方式获取实现类实例:

到此我们自定义ServiceLoader已经初步实现,在实际开发中,我们一般只需要一个实例及单利,在此我们可以用Map将类的实例与接口类名绑定起来即可。

使用

  加载properties配置参数的思路与ServiceLoader基本一致,只是获取配置参数可以通过java类Properties获取

1.获取流

  和自定义ServiceLoader获取流一致

2.获取Properties实例

3.获取value

4.使用

1.在查看Iterable 接口时无意中发现了default关键字,经查看资料显示为java8新加的,用于在接口中写默认的方法函数体

有兴趣的可以去 https://github.com/dengzhi00/deployloader 看看


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11727050.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存