Android存取数据的几种方式


一:自定义一个路径存储数据

/**
 * 自定义一个路径存储数据
 这里自定义一个/data/data/com.yin.qqLogin/msg.txt路径
 * 发现一个有意思的现象,不能用$分割字符串,不然取不到,不知为什么
 * @author Administrator
 *
 */
public class Utils {
	/**
	 * 根据绝对路径保存qq号和密码
	 * @return
	 */
	public static boolean saveUserInfo(String number,String password){
		//绝对路径
		String path="/data/data/com.yin.qqLogin/msg.txt";
		String msg=number+"$$"+password;
		File file=new File(path);
		try {
			FileOutputStream fos=new FileOutputStream(file);//也可以直接传入path
			fos.write(msg.getBytes());
			fos.flush();
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
	
	/**
	 * 根据绝对路径获取qq号和密码
	 */
	public static Map<String, String> getUserInfo(){
		Map<String,String> map=null;
		try {
			String path="/data/data/com.yin.qqLogin/msg.txt";
			File file=new File(path);
			if(!file.exists()){
				return null;
			}
			/**
			 * FileInputStream:字节流
			 * InputStreamReader:字节流转换为字符流的桥梁
			 * BufferedReader:字符缓冲流,可实现搞笑读取,即一次可以读取很多
			 */
			FileInputStream fis=new FileInputStream(file);//也可以直接传入path
			BufferedReader bf=new BufferedReader(new InputStreamReader(fis));
			String data=bf.readLine();
			if(!TextUtils.isEmpty(data)){
				String[] info=data.split("$$");
				map=new HashMap<String, String>();
				map.put("number", info[0]);
				map.put("password", info[1]);
			}
			
			bf.close();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return map;
	}
	
}

二:在/data/data/包名/filses或/data/data包名/cache路径下存储数据

/**
 * 在/data/data/当前包名/files目录下存储数据
 * 或者在/data/data/当前包名/cache目录下存储数据
 * @author Administrator
 *
 */
public class Utils {
	
	/**
	 * 自动获取当前应用的在手机内存中的数据局存储路径:Context.getFileDir();
	 * 返回的是/data/data/当前包名/files
	 */
	public static boolean saveUserInfo(Context context,String number,String password){
		File fileDir=context.getFilesDir();
		/**
		 * 手机中,设置>应用程序>管理应用程序>选择一个应用>会看到clean data,其中就有cache
		 */
//		File fileDir=context.getCacheDir();//获取缓存目录
		File file=new File(fileDir, "info.txt");
		try {
			FileOutputStream fos=new FileOutputStream(file);
			String info=number+"##"+password;
			fos.write(info.getBytes());
			fos.flush();
			fos.close();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	
	/**
	 * 自动获取当前应用的在手机内存中的数据局存储路径:Context.getFileDir();
	 * 返回的是/data/data/当前包名/files
	 */
	public static Map<String,String> getUserInfo(Context context){
		File fileDir=context.getFilesDir();
//		File fileDir=context.getCacheDir();//获取缓存目录
		File file=new File(fileDir,"info.txt");
		try {
			FileInputStream fis=new FileInputStream(file);
			BufferedReader bf=new BufferedReader(new InputStreamReader(fis));
			String text=bf.readLine();
			if(!TextUtils.isEmpty(text)) {
				String[] split = text.split("##");
			
				Map<String, String> userInfoMap = new HashMap<String, String>();
				userInfoMap.put("number", split[0]);
				userInfoMap.put("password", split[1]);
				return userInfoMap;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return null;
	}
}

三:通过SDCard存取数据

public class UtilsOfSDCard {
/**
 * 向sd卡中存入数据
 */
	public static boolean saveUserInfo(String number,String password){
		//判断设备是否已经安装了sd卡
		String status=Environment.getExternalStorageState();
		//如果没有sd则返回false
		if(!Environment.MEDIA_MOUNTED.equals(status)){
			return false;
		}
		//如果已经安装了sd卡
		File file=new File(Environment.getExternalStorageDirectory(),"info.txt");
		try {
			FileOutputStream fos=new FileOutputStream(file);
			String data=number+"##"+password;
			fos.write(data.getBytes());
			fos.flush();
			fos.close();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	/**
	 * 从sd卡读取数据
	 */
	public static Map<String,String> getUserInfo(){
		//判断设备是否装了sd卡
		String status=Environment.getExternalStorageState();
		if(!Environment.MEDIA_MOUNTED.equals(status)){
			return null;
		}
		//如果装了sd卡,则从sd卡中取出数据
		File file=new File(Environment.getExternalStorageDirectory(),"info.txt");
		try {
			FileInputStream fis=new FileInputStream(file);
			BufferedReader bf=new BufferedReader(new InputStreamReader(fis));
			String info=bf.readLine();
			if(!TextUtils.isEmpty(info)){
				Map<String,String> map=new HashMap<String, String>();
				String[] data=info.split("##");
				map.put("number", data[0]);
				map.put("password", data[1]);
				bf.close();
				return map;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

四:通过SharedPreferences存取数据

public class UtilsOfShared {
/**
 * 用SharedPreferences保存用户信息
 */
	public static boolean saveUserInfo(Context context,String number,String password){
		/**
		 * SharedPreferences:
		 * 创建/data/data/包名/shared_prefs/info.xml,
		 * 即使你自己定义了文件类型,创建的结果仍然是xml文件,
		 * 例如你要创建info.txt,实际创建的结果是info.txt.xml
		 */
		try {
			SharedPreferences sp=context.getSharedPreferences("info", Context.MODE_PRIVATE);
			//获取一个编辑器
			Editor editor=sp.edit();
			//用编辑器将number和password放入info.xml中
			editor.putString("number", number);
			editor.putString("password", password);
			//至此,编辑器真正提交数据
			editor.commit();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		
	}
	/**
	 * 用SharedPreferences获取用户信息
	 */
	public static Map<String,String> getUserInfo(Context context){
		//创建一个SharedPreferences
		SharedPreferences sp=context.getSharedPreferences("info", Context.MODE_PRIVATE);
		//从sp中获取number和password
		String number=sp.getString("number", null);
		String password=sp.getString("password", null);
		//判断number,password是否为null
		if(!TextUtils.isEmpty(number)&&!TextUtils.isEmpty(password)){
			Map<String ,String> map=new HashMap<String, String>();
			map.put("number", number);
			map.put("password", password);
			return map;
		}
		return null;
	}
}

总结:

通过以上几种方式存储的数据,在app卸载后,你在SDCard中创建的目录存储的数据不会被删,但是其它几种方式存储的数据都会被删除,即在/data/data/包名下的数据都会被删除。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值