写这篇文章之前可以成功运行,文章后就各种找不到文件.所以并没有采用此种方式,后期完善.详见下篇解决方案.

配置文件读取很容易,修改需要注意权限,比如assets目录下就不允许修改.

配置文件的创建:

New --- File

命名后选择properties方式打开

配置文件设置

contrastIP = 192.166.1.65:8011

assets目录创建

在main目录下,与java res 目录同级创建.

New --- Folder --- Assets Folder

assets目录详解: http://blog.csdn.net/chuntiandejiaobu10/article/details/52352128

权限配置

在 AndroidManifest.xml 中添加:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

其实我去掉后测试也可以成功运行.还是加上.预防万一.

先读配置:

方法一 读取assets目录下的配置

Properties props = new Properties();
props.load(context.getAssets().open(configName));

将configName文件从assets目录下放出来,放在main目录下:

方法二  会出现错误 open failed: ENOENT (No such file or directory) 然而并不知道目录路径该如何填

Properties props = new Properties();
props.load(new FileInputStream(configName));

方法三  这样就能成功运行

Properties props = new Properties();
props.load(context.openFileInput(configName));

修改配置:

Properties props = new Properties();
props.load(context.openFileInput(configPath));
props.setProperty(keyName, keyValue); // 读取assets目录下的,但是根本无法修改
// FileOutputStream out = context.getAssets().openFd(configPath).createOutputStream();
// 提示 open failed: EROFS (Read-only file system) 
// FileOutputStream out = new FileOutputStream(configPath); // 这样就可以了
FileOutputStream out = context.openFileOutput(configPath,Context.MODE_PRIVATE);

参考Context.MODE_PRIVATE说明: http://www.cnblogs.com/yjpjy/p/5407251.html

完整代码

ProperTies 类
package com.**.demo.utils;

import android.content.Context;
import android.util.Log; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties; public class ProperTies {
//private static String configPath = getExternalStorageDirectory() + File.separator + "appConfig";
private static String configPath = "appConfig"; public static Properties getProperties(Context context) {
Log.e("configPath", configPath); Properties urlProps;
Properties props = new Properties();
try {
//方法一:通过activity中的context攻取setting.properties的FileInputStream
//注意这地方的参数appConfig在eclipse中应该是appConfig.properties才对,但在studio中不用写后缀
//InputStream in = c.getAssets().open("appConfig.properties"); //props.load(context.getAssets().open(configName)); //方法二:通过class获取setting.properties的FileInputStream
//InputStream in = PropertiesUtill.class.getResourceAsStream("/assets/ setting.properties ")); // 方法三
props.load(context.openFileInput(configPath));
// props.load(new FileInputStream(configPath)); } catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} urlProps = props;
return urlProps;
} //保存配置文件
public static String setProperties(Context context, String keyName, String keyValue) {
Properties props = new Properties();
try {
props.load(context.openFileInput(configPath));
props.setProperty(keyName, keyValue);
// FileOutputStream out = context.getAssets().openFd(configPath).createOutputStream();
FileOutputStream out = context.openFileOutput(configPath,Context.MODE_PRIVATE);
// FileOutputStream out = new FileOutputStream(configPath);
props.store(out, null); } catch (Exception e) {
e.printStackTrace();
Log.e("setPropertiesError", e.toString());
return "修改配置文件失败!";
}
return "设置成功";
} }
UrlString类:
package com.**.demo.json;

import android.content.Context;
import com.**.demo.utils.ProperTies; import java.util.Properties; /**
* 读写配置属性类
*/ public class UrlString { private String contrastIPName = "contrastIP"; // 上传路径
private String ip;
private String ipAddress; public void setIPAddress(Context context) {
Properties proper = ProperTies.getProperties(context);
this.ip = proper.getProperty(contrastIPName, "");
this.ipAddress = "http://" + this.ip + "/index.html";
} public String setIPAddress(Context context, String keyValue) {
String result = ProperTies.setProperties(context, contrastIPName, keyValue);
this.ip = keyValue;
this.ipAddress = "http://" + this.ip + "/index.html";
return result;
} public String getIP() {
return this.ip;
} public String getIPAddress() {
return this.ipAddress;
}
}

在activity中使用:

加载配置文件:

private UrlString urlString = new UrlString();

editText = (EditText) findViewById(R.id.et_ip);
// 加载配置的信息 --- IP地址
urlString.setIPAddress(this);
editText.setText(urlString.getIP()); // 获取完整地址
// urlString.getIPAddress()
 

修改配置文件:

String value = editText.getText().toString();
String result = urlString.setIPAddress(this,value); tools.customToast(result, ConfigActivity.this);

Android读写properties配置文件的更多相关文章

  1. java 顺序 读写 Properties 配置文件

    java 顺序 读写 Properties 配置文件 支持中文 不乱码 java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不 ...

  2. 【转】Java 读写Properties配置文件

    [转]Java 读写Properties配置文件 1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形 ...

  3. Java 读写Properties配置文件

    Java 读写Properties配置文件 JAVA操作properties文件 1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了M ...

  4. java 顺序 读写 Properties 配置文件 支持中文 不乱码

    java 顺序 读写 Properties 配置文件 ,java默认提供的Properties API 继承hashmap ,不是顺序读写的. 特从网上查资料,顺序读写的代码,如下, import j ...

  5. (转)Java 读写Properties配置文件

    原文:http://www.cnblogs.com/xudong-bupt/p/3758136.html 1.Properties类与Properties配置文件 Properties类继承自Hash ...

  6. java读写properties配置文件方法

    1.Properties类 Properties类表示了一个持久的属性集.Properties可保存在流中或从流中加载,属性列表中的key和value必须是字符串. 虽然Properties类继承了j ...

  7. Java 读写Properties配置文件【转】

    1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集.不过Properties有特殊的地 ...

  8. Properties类读写.properties配置文件

    package com.hzk.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFo ...

  9. java读写properties配置文件不改变属性的顺序和注释

    先贴代码 import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java ...

随机推荐

  1. springdata find立即加载 get延迟加载 get返回的是一个动态代理对象 特点是 用的时候才会查询 否则不查询

  2. EntityManagerFactory 是多线程的 将其变成一个单线程(使用静态方法)提交效率

    由于EntityManagerFactory 是一个线程安全的对象(即多个线程访问同一个EntityManagerFactory 对象不会有线程安全问题),并且EntityManagerFactory ...

  3. Bugku 杂项 啊哒

    有趣的表情包来源:第七届山东省大学生网络安全技能大赛 下载下来安装包后可以得到一张图片,010发现jpg后面还夹带着一些东西,用binwalk提取后得到一个压缩包,但是需要密码. 我卡在这里了,尝试了 ...

  4. Go语言中的Iota

    一.复习常量 提到Iota这个关键字,就必须要复习一下Go语言的常量. 1.Go语言的常量一般使用const声明 2.Go语言的常量只能是布尔型.数字型(整数型.浮点型和复数)和字符串型 3.Go语言 ...

  5. Loj #528. 「LibreOJ β Round #4」求和 (莫比乌斯反演)

    题目链接:https://loj.ac/problem/528 题目:给定两个正整数N,M,你需要计算ΣΣu(gcd(i,j))^2 mod 998244353 ,其中i属于[1,N],j属于[1,M ...

  6. JS输入框统计文字数量

    $('#articleTitle').bind('input propertychange',function () { var a = $(this).val().length; if(a>3 ...

  7. Kubernetes之Deployment控制器

    Deployment 简介 deployment 是用来管理无状态应用的,面向的集群的管理,而不是面向的是一个不可变的个体,举例:有一群鸭子,要吃掉一个,只需要再放一个新的鸭仔就好了,不会影响什么,而 ...

  8. 微星X470主板装机

    记录一下装机过程,以作纪念 配置 机箱:先马黑洞3 电源:先马金牌500w CPU:AMD 锐龙5:2600X 主板:微星 X470 暗黑版 显卡:七彩虹 RTX2060 内存:科赋 3200,2条8 ...

  9. pymysql的使用及sql注入

    pymysql简介 pymysql是python操纵mysql的一个模块,本质上是一个socket客户端 pymysql使用 准备数据 #创建数据库db2,如果已存在,请忽略 CREATE DATAB ...

  10. [物理学与PDEs]第5章第3节 守恒定律, 应力张量

    5. 3 守恒定律, 应力张量 5. 3. 1 质量守恒定律 $$\bex \cfrac{\p \rho}{\p t}+\Div_y(\rho{\bf v})=0.  \eex$$ 5. 3. 2 应 ...