Android SharedPreferences & 文件读写(内/外) & XML & JSON

#读写数据


*****

*****

##SharedPreferences
###存储数据

SharedPreferences spPreferences = getSharedPreferences("data", MODE_PRIVATE); //创建对象(数据名称,模式)
Editor editor = spPreferences.edit();  //用编辑器的方法保存数据 
editor.putString(qq, pwd);
editor.putString("QQ", qq);
editor.putString("PWD", pwd);
editor.commit();                //提交编辑器 
模式概述
MODE_PRIVATE默认操作模式,代表文件是私有数据,只能被应用本身访问,写入的内容会覆盖原文件的内容
MODE_APPEND模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件
MODE_WORLD_READABLE表示当前文件可以被其他应用读取
MODE_WORLD_WRITEABLE表示当前文件可以被其他应用写入

###读取存储的数据 (为NULL不会出错)

SharedPreferences spPreferences = getSharedPreferences("data", MODE_PRIVATE);
String qq = spPreferences.getString("QQ", "");        //第二个参数:找不到数据时返回这个
String pwd = spPreferences.getString("PWD", "");
//map = (Map<String, String>) spPreferences.getAll();  获取所有数据到map

*****

*****

##内部存储

void Write(String value, String mulu){ //内容 目录 "/data/data/cn.ly.wjcz/data3.txt"
	try {
	    //FileOutputStream fileOutputStream = 上下文.this.openFileOutput("data3.txt", MODE_PRIVATE); //这个包里的文件
		FileOutputStream fos= new FileOutputStream(mulu, true); //文件输出流 (true:续写、false:重构)
		fos.write(value.getBytes());                            //写内容进去
		fos.close();                                            //关闭文件
	} catch (Exception e) {
		e.printStackTrace();  //把错误抛出去
		Toast.makeText(Filecz.this, e.getMessage(), Toast.LENGTH_LONG).show();
	}
}

	
String Read(String mulu){ //目录
	String temp, value = "";
	char buffer[] = new char[10];
	int nr = 0;
	try {
		/* 字节流
		FileInputStream fis = Filecz.this.openFileInput("data3.txt");//这个包里的文件
		//1.
        int size = fis.available(); //有多少字节
		byte buffer[] = new byte[size];
		fis.read(buffer);
		String valueString = new String(buffer);
		edtx.setText(valueString);
		fis.close();
        
        //2.
        BufferedReader bufr = new BufferedReader(new InputStreamReader(fis));//转换流
        String s = bufr.readLine(); // 读取一行
        
		Toast.makeText(Filecz.this, "读取成功", Toast.LENGTH_LONG).show();*/
			
		//字符流
		FileReader fileReader = new FileReader(mulu); //打开文件
		while((nr = fileReader.read(buffer))>0){ //十个字符十个字符的读取
			temp = new String(buffer, 0, nr);
			value = value + temp;
		}
		fileReader.close();
	} catch (Exception e) {
		e.printStackTrace();
		Toast.makeText(Filecz.this, e.getMessage(), Toast.LENGTH_LONG).show();
	}
	return value;
}

*****

*****

##外部存储 (SD)

<!-- 写入外部存储SD卡  --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 读取外部存储SD卡  --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
void SDWrite(String value, String mulu){ //内容 目录 "DCIM/data1.txt"
	//增加权限:写sd卡文件 - android.permission.WRITE_EXTERNAL_STORAGE    
	String state = Environment.getExternalStorageState(); //检测是否有SD卡 1
	if(state.equals(Environment.MEDIA_MOUNTED)){          //如果有SD卡
		File dir = Environment.getExternalStorageDirectory();
        //long d = dir.getTotalSpace(); //SD卡总大小  (单位:字节)
        //dir.getUsableSpace(); //可用空间
        //String s = Formatter.formatFileSize(上下文环境, d); //自动对应单位格式 
		Toast.makeText(Filecz.this, dir.getAbsolutePath(), Toast.LENGTH_LONG).show();//把路径显示出来
		File file = new File(dir, mulu); // (目录,文件名) 
		try {
			FileOutputStream outf = new FileOutputStream(file, false); //true为续写、false为重新
			outf.write(value.getBytes()); //写入内容,把字符串转换为字节
			outf.close();
		} catch (Exception e) {
			e.printStackTrace();
			Toast.makeText(Filecz.this, e.getMessage(), Toast.LENGTH_LONG).show();
		}
	}
}
String SDRead(String mulu){   "DCIM/data1.txt"
	String value = "";
	String state = Environment.getExternalStorageState();
	if(state.equals(Environment.MEDIA_MOUNTED)){
		File dir =Environment.getExternalStorageDirectory();
		File file = new File(dir, mulu); // (目录,文件名)
		try {
			FileInputStream inf = new FileInputStream(file);
			//直接读
			byte byte1[] = new byte[inf.available()];
			inf.read(byte1);
			value = new String(byte1);
			/* 一行一行读
			InputStreamReader ifsread = new InputStreamReader(inf);
			BufferedReader bufread = new BufferedReader(ifsread);
			String str = "";
			str = bufread.readLine();
			while(str != null){
				value = value + "\n" +str;
				str = bufread.readLine();
			}*/
			inf.close();
		} catch (Exception e) {
			e.printStackTrace();
			Toast.makeText(Filecz.this, e.getMessage(), Toast.LENGTH_LONG).show();
		}
	}
	return value;
}

*****

*****

##读写XML

private void XmlWrite() {  //写Xml文件
	String state = Environment.getExternalStorageState();
	if (state.equals(Environment.MEDIA_MOUNTED)) {  //如果有SD卡
			
		try {
			//新建文件
			File file = new File(Environment.getExternalStorageDirectory(), "test.xml"); //指向SD卡的路径
			FileOutputStream fos = new FileOutputStream(file);
			
			//新建XML
			XmlSerializer xmlSerializer = Xml.newSerializer();
			//设置XML序列化参数
			xmlSerializer.setOutput(fos, "utf-8");
			
			//XMl开头
			xmlSerializer.startDocument("utf-8", true);
				
			//XML根部
			xmlSerializer.startTag(null, "Persons");
			
			xmlSerializer.startTag(null, "Person");
			xmlSerializer.attribute(null, "Num","2014001" ); //属性
			xmlSerializer.startTag(null, "Name");    //内容
			xmlSerializer.text("Xiaoming");          //内容中的内容
		    xmlSerializer.endTag(null, "Name");
			xmlSerializer.endTag(null, "Person");
				
			xmlSerializer.startTag(null, "Person");
			xmlSerializer.attribute(null, "Num","2014002" ); //属性
			xmlSerializer.startTag(null, "Name");    //内容
			xmlSerializer.text("XiaoHong");          //内容中的内容
			xmlSerializer.endTag(null, "Name");
			xmlSerializer.endTag(null, "Person");
			
			//XML根部
			xmlSerializer.endTag(null, "Persons");
				
			//xml结尾
			xmlSerializer.endDocument();
				
			xmlSerializer.flush();
				
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
	
	/*
	<Persons>   ------xmlSerializer.startTag(null, "Persons");
	   <Person Num="2014001">  ---xmlSerializer.startTag(null, "Person");
			           ---xmlSerializer.attribute(null, "Num","2014001" );
	       <Name>Xiaoming</Name>
	       <Age>18</Age>
	   </Person>
	   <Person Num="2014002">
	        <Name>XiaoHong</Name>
	        <Age>17</Age>
	   </Person>
	</Persons>-----xmlSerializer.endTag(null, "Persons");
	*/
private void XmlRead() {
	//新建类和容器,用来保存信息
	class StudentIno {
		String Num;
		String Name;
		String Age;
	}
	ArrayList<StudentIno> arrayList = null;
	//判读是否有SD卡
	String state = Environment.getExternalStorageState();
	if (state.equals(Environment.MEDIA_MOUNTED)) {
		try {
            File file = new File(Environment.getExternalStorageDirectory(), "test.xml"); //打开文件
			FileInputStream fileInputStream = new FileInputStream(file);
			XmlPullParser xmlPullParser = Xml.newPullParser();
			xmlPullParser.setInput(fileInputStream, "utf-8"); //文件 编写格式
			StudentIno studentIno = null;
			int EventType = xmlPullParser.getEventType();

			while (EventType != XmlPullParser.END_DOCUMENT) {     //标识 不等于 Xml文件结尾标志      一行一行的解析
				switch (EventType) {
				case XmlPullParser.START_DOCUMENT: //Xml文件开头标志
					break;
				case XmlPullParser.END_DOCUMENT:  //Xml文件结尾标志
					break;
				case XmlPullParser.START_TAG: {  //节点开始标志
					String nodeName = xmlPullParser.getName();
					if (nodeName.equals("Persons")) {  //如果节点是 Persons ...
						arrayList = new ArrayList<StudentIno>();
					} else if (nodeName.equals("Person")) {
						studentIno = new StudentIno();
						studentIno.Num = xmlPullParser.getAttributeValue(null, "Num");
					} else if (nodeName.equals("Name")) {
						studentIno.Name = xmlPullParser.nextText();
					} else if (nodeName.equals("Age")) {
						studentIno.Age = xmlPullParser.nextText();
					}
				}
					break;

				case XmlPullParser.END_TAG: {   //节点结束标志
					String nodeName = xmlPullParser.getName();
					if (nodeName.equals("Persons")) {
						int nvalue = 10;
						nvalue++;
					} else if (nodeName.equals("Person")) {
						arrayList.add(studentIno);
					} else if (nodeName.equals("Name")) {
					} else if (nodeName.equals("Age")) {
					}
				}
					break;
				default:
					break;
				}
				EventType = xmlPullParser.next();        //移动到下一行
			}
			fileInputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

*****

*****

##JSON

判断json是否有一个KEY jsonRespObj.has(“keyname”) 返回bool类型 是否有
http://blog.csdn.net/onlyonecoder/article/details/8490924

对象简介
JSONObjectJSON对象
JSONStringerJSON文本构建类
JSONArrayJSON数组

*****

原文

{
	people:[
		    {
			    "Name":"卢细",   //字符串类型 "Key":"Value"
			    "Sex":true,      //布尔类型 "Key":true/false
			    "Age":21,        //数值类型  不能太长 "Key":201463029
			    "Phone":["1316826****","1892452****"],   //数组类型 []
			    "Address":{"Country":"中国", "Province":"广东省", "City":"潮州", "Detailed":"干嘛告诉你..."} //对象类型 {}
		    }
		    {
			    "Name":"你是谁",
			    "Sex":false,
			    "Age":20,
			    "Phone":["12345678910","13772552590"],
			    "Address":{"Country":"中国", "Province":"广东省", "City":"潮汕", "Detailed":"谁知道呢..."}
		    }
	]
}

*****

###创建JSON文件

####创建JSON文件1(JSONObject+JSONArray):

		String value;
		
		try {
			JSONArray person = new JSONArray();
			
			JSONObject j = new JSONObject();
			j.put("Name", "卢细");
			j.put("Sex", true);
			j.put("Age", 21);
			JSONArray Phone = new JSONArray();
			Phone.put("13168260761").put("18924520098");
			j.put("Phone", Phone);
			JSONObject Address = new JSONObject();
			Address.put("Country", "中国");
			Address.put("Province", "广东省");
			Address.put("City", "潮州");
			Address.put("Detailed", "干嘛告诉你...");
			j.put("Address", Address);
			
			person.put(j);
			
			JSONObject y = new JSONObject();
			y.put("Name", "你是谁");
			y.put("Sex", false);
			y.put("Age", 20);
			JSONArray Phone2 = new JSONArray();
			Phone2.put("12345678910").put("13772552590");
			y.put("Phone", Phone2);
			JSONObject Address2 = new JSONObject();
			Address2.put("Country", "中国");
			Address2.put("Province", "广东省");
			Address2.put("City", "潮州");
			Address2.put("Detailed", "干嘛告诉你...");
			y.put("Address", Address2);
			
			person.put(y);
			
			value = person.toString();
		} catch (JSONException e) {
			e.printStackTrace();
		}

####创建JSON文件2(JSONStringer):

		try {
			JSONStringer jt = new JSONStringer();
			jt.array();
			
			jt.object();
			jt.key("Name").value("卢细");
			jt.key("Sex").value(true);
			jt.key("Age").value(21);
			jt.key("Phone").array().value("13168260761").value("18924520098").endArray();
			jt.key("Address").object().key("Country").value("中国").key("Province").value("广东省")
				.key("City").value("潮州").key("Detailed").value("干嘛告诉你...").endObject();
			jt.endObject();
			
			jt.object();
			jt.key("Name").value("你是谁");
			jt.key("Sex").value(false);
			jt.key("Age").value(20);
			jt.key("Phone").array().value("12345678910").value("13772552590").endArray();
			jt.key("Address").object().key("Country").value("中国").key("Province").value("广东省")
				.key("City").value("潮汕").key("Detailed").value("谁知道呢...").endObject();
			jt.endObject();
			
			jt.endArray();
			
			value = person.toString();
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

*****

###读取JSON对象

	public List<People> goRead(String value){
		
		List<People> peoples = null;
		
		try {
			peoples = new ArrayList<People>();
			
			JSONArray ja = new JSONArray(value);
			JSONObject i = null;
			JSONArray iphone = null;
			JSONObject iaddress = null;
			
			People person = new People();
			String[] phoneArray = null;
			Address address = null;
			
			i = ja.getJSONObject(0);
			person.setName(i.getString("Name"));
			person.setSex(i.getBoolean("Sex"));
			person.setAge(i.getInt("Age"));
			iphone = i.getJSONArray("Phone");
			phoneArray = new String[2];
			phoneArray[0] = iphone.getString(0);
			phoneArray[1] = iphone.getString(1);
			person.setPhone(phoneArray);
			address = new Address();
			iaddress = i.getJSONObject("Address");
			address.setCountry(iaddress.getString("Country"));
			address.setProvince(iaddress.getString("Province"));
			address.setCity(iaddress.getString("City"));
			address.setDetailed(iaddress.getString("Detailed"));
			person.setAddress(address);
			
			peoples.add(person);
			person = new People();
			
			//get和opt的区别:如果找不到那个值,get会报错,opt会返回第二个参数
			
			i = ja.optJSONObject(1);
			person.setName(i.optString("Name","Name"));
			person.setSex(i.optBoolean("Sex",false));
			person.setAge(i.optInt("Age",0));
			iphone = i.optJSONArray("Phone");
			phoneArray = new String[2];
			phoneArray[0] = iphone.optString(0,"123");
			phoneArray[1] = iphone.optString(1,"321");
			person.setPhone(phoneArray);
			address = new Address();
			i = i.optJSONObject("Address");
			address.setCountry(i.optString("Country","Country"));
			address.setProvince(i.optString("Province","Province"));
			address.setCity(i.optString("City","City"));
			address.setDetailed(i.optString("Detailed","Detailed"));
			person.setAddress(address);
			
			peoples.add(person);
			
		} catch (JSONException e) {
			e.printStackTrace();
		}
		
		return peoples;
	}

	
public List<People> jtRead(String value){
		
		List<People> peoples = null;
		
		try {
			peoples = new ArrayList<People>();
			
			//与上面的区别就是这两行
			JSONTokener jsonParser = new JSONTokener(value);
			JSONArray ja = (JSONArray) jsonParser.nextValue();
			
			JSONObject i = null;
			JSONArray iphone = null;
			
			People person = new People();
			String[] phoneArray = null;
			Address address = null;
			
			i = ja.getJSONObject(0);
			person.setName(i.getString("Name"));
			person.setSex(i.getBoolean("Sex"));
			person.setAge(i.getInt("Age"));
			iphone = i.getJSONArray("Phone");
			phoneArray = new String[2];
			phoneArray[0] = iphone.getString(0);
			phoneArray[1] = iphone.getString(1);
			person.setPhone(phoneArray);
			address = person.getAddress();
			i = i.getJSONObject("Address");
			address.setCountry(i.getString("Country"));
			address.setProvince(i.getString("Province"));
			address.setCity(i.getString("City"));
			address.setDetailed(i.getString("Detailed"));
			person.setAddress(address);
			
			peoples.add(person);
			person = new People();
			
			//get和opt的区别:如果找不到那个值,get会报错,opt会返回第二个参数
			
			i = ja.optJSONObject(1);
			person.setName(i.optString("Name","Name"));
			person.setSex(i.optBoolean("Sex",false));
			person.setAge(i.optInt("Age",0));
			iphone = i.optJSONArray("Phone");
			phoneArray = new String[2];
			phoneArray[0] = iphone.optString(0,"123");
			phoneArray[1] = iphone.optString(1,"321");
			person.setPhone(phoneArray);
			address = person.getAddress();
			i = i.optJSONObject("Address");
			address.setCountry(i.optString("Country","Country"));
			address.setProvince(i.optString("Province","Province"));
			address.setCity(i.optString("City","City"));
			address.setDetailed(i.optString("Detailed","Detailed"));
			person.setAddress(address);
			
			peoples.add(person);
			
		} catch (JSONException e) {
			e.printStackTrace();
		}
		
		return peoples;
	}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值