#读写数据
*****
*****
##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.youkuaiyun.com/onlyonecoder/article/details/8490924
对象 | 简介 |
---|---|
JSONObject | JSON对象 |
JSONStringer | JSON文本构建类 |
JSONArray | JSON数组 |
*****
原文
{
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;
}
*****