android下properties文件的读写操作

   android下properties文件的读写操作,网上大多数是读是成功的,如果要是写数据到文件里面,都会报这样的错误:Caused by: java.io.FileNotFoundException: /operation.properties: open failed: EROFS (Read-only file system),提示是没有权限进行写,如下是国外的网站的解释:

... saves to an external directory
This is not quite right. You are trying to save it in the root system partition which is always read-only.

From javadoc of Environment.getRootDirectory():

Return root of the "system" partition holding the core Android OS. Always present and mounted read-only.
Solution : just save your file somewhere else :

StreamResult result = new StreamResult(new File(android.os.Environment.getExternalStorageDirectory(), "upload_data.xml"));
Note that :

you must ask the permission to write to the external storage :
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

External storage is not always available. The partition may not be mounted -yet- when you try to write on it. (just be careful)

android.os.Environment.getExternalStorageDirectory()
     上述的解释大概是:root system文件系统是只读的,需要使用android.os.Environment.getExternalStorageDirectory()这样的形式, 获取扩展存储设备的文件目录
  * android.os.Environment.getExternalStorageDirectory();可以进行读写,所以我将网上的代码的路径都改为这个路径,不将properties的文件放到src目录下,如下代码:

package allone.verbank.apad.client.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;

import android.app.Activity;

/**
 * 读取本地保存的proper文件,保存的行为记录
 * 
 * @author qiulinhe
 * @createTime 2016年6月7日 下午1:28:16
 */
public class ProperUtil {
	/**
	 * 得到netconfig.properties配置文件中的所有配置属性
	 * 
	 * @return Properties对象
	 */
	public static Properties getNetConfigProperties() {
		Properties props = new Properties();
		//		InputStream in = ProperUtil.class.getResourceAsStream("/operation.properties");
		InputStream in = null;
		try {
			in = new FileInputStream(android.os.Environment.getExternalStorageDirectory() + File.separator
					+ "operation.properties");
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		}
		try {
			props.load(in);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return props;
	}

	/**
	 * 给属性文件添加属性
	 * 
	 * @param param
	 * @param value
	 * @author qiulinhe
	 * @createTime 2016年6月7日 下午1:46:53
	 */
	public static void put(Activity activity, String key, String value) {
		String PROP_PATH = activity.getApplicationContext().getFilesDir().getAbsolutePath();
		Properties p = new Properties();
		try {
			InputStream in = new FileInputStream(android.os.Environment.getExternalStorageDirectory() + File.separator
					+ "operation.properties");
			p.load(in);
		} catch (IOException e) {
			e.printStackTrace();
		}
		p.setProperty(key, value);
		OutputStream fos;
		try {
			fos = new FileOutputStream(android.os.Environment.getExternalStorageDirectory() + File.separator
					+ "operation.properties");
			p.store(fos, null);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}
如下路径的解释:

其实Android Environment.getExternalStorageDirectory() 获取的 SD卡和手机本身带的存储 ;这两个存储都是外部储存,真正的内部储存位置是data/data/包名,所以用了这个会出现还是存到了手机自带存储上,而不是SD卡上

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值