android修改assets下的Properties不生效
项目中遇到修改Properties中的url,使用网上的方法,没有生效。我自己研究明白了,mark一下。首先,我们知道获取Properties的值,有2中方法:方法一:property.load(context.getAssets().open("zhihui.properties"));方法二:properties.load(context.openFileIn...
·
项目中需求是:server发指令需要动态修改app连接服务的地址,
地址是写在Properties配置文件中的,需要动态修改,使用网上的方法,没有生效。
我自己研究明白了,mark一下。
首先,我们知道获取Properties的值,有2中方法:
方法一:
property.load(context.getAssets().open("zhihui.properties"));
方法二:
properties.load(context.openFileInput("zhihui.properties"));
这两种方法,加载的是同一个zhihui.properties文件吗?
答:不是。
来看一张图:
左边的properties文件1:是我们项目中的文件。
右边的properties文件2:是安装到手机上以后,执行android代码生成的的文件。默认是不存在的。
回过头来说,上面的两个方法:
方法一的代码,加载的是左边的文件1。
方法二的代码,加载的是右边的文件2。
来说修改properties没有生效的原因:
左边的properties文件1,是不能修改的。
右边的properties文件2,是可以修改的。
我们应该修改的是:文件2,并且,从文件2中获取配置信息。
那么,如何生成文件2呢?代码如下:
//初始化配置文件
//最好放在Application中,初始化。
public static String initProperties(Context context) {
Properties props = new Properties();
try {
props.load(context.getAssets().open("zhihui.properties"));
FileOutputStream out = context.openFileOutput("zhihui.properties",Context.MODE_PRIVATE);
props.store(out, null);
} catch (Exception e) {
e.printStackTrace();
return "修改配置文件失败!";
}
return "设置成功";
}
这样,就生成的一个文件2,内容和文件1是一模一样的。
其实,就是把文件1的内容复制到了文件2中。
然后,我们在设置和获取的时候,都对这个文件2进行操作就可以了。
代码如下:
获取:
/**
* 获取
*/
public String getUrl(Context context) {
String url = null;
try {
property.load(context.openFileInput("zhihui.properties"));
url = property.getProperty("host");
} catch (Exception e) {
e.printStackTrace();
}
return url;
}
设置:
//修改配置文件
public static String setProperties(Context context, String keyName, String keyValue) {
Properties properties = new Properties();
try {
properties.load(context.openFileInput("zhihui.properties"));
properties.setProperty(keyName, keyValue);
FileOutputStream out = context.openFileOutput("zhihui.properties",Context.MODE_PRIVATE);
properties.store(out, null);
} catch (Exception e) {
e.printStackTrace();
return "修改配置文件失败!";
}
return "设置成功";
}
这样就ok了。
更多工具:
更多推荐
已为社区贡献7条内容
所有评论(0)