需求分析:将一些数据保存到文件中,下次读取出来用。
实现代码:
1、TestSerializable.java文件
package com.ansdk.sdktest;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.io.StreamCorruptedException;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class TestSerializable extends Activity {
Button but1, but2;
TextView tv1, tv2;
int count = 0;
private static String mSDCARD = null;
// ArrayList<HashMap<String, Object>> arrayList;
// ArrayList<HashMap<String, Object>> arrayList2;
ArrayList<HashMap<String, Stu>> arrayList3;
ArrayList<HashMap<String, Stu>> arrayList4;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
but1 = (Button) findViewById(R.id.but1);
but2 = (Button) findViewById(R.id.but2);
tv1 = (TextView) findViewById(R.id.tv1);
tv2 = (TextView) findViewById(R.id.tv2);
// arrayList = new ArrayList<HashMap<String, Object>>();
// HashMap<String, Object> map = new HashMap<String, Object>();
// map.put("id", "1");
// map.put("name", "xuliehua");
// HashMap<String, Object> map1 = new HashMap<String, Object>();
// map1.put("id", "2");
// map1.put("name", "fanxuliehua");
//
// arrayList.add(map);
// arrayList.add(map1);
HashMap<String, Stu> map3 = new HashMap<String, Stu>();
map3.put("id", new Stu("张三",28));
map3.put("name", new Stu("李四",108));
HashMap<String, Stu> map4 = new HashMap<String, Stu>();
map4.put("id", new Stu("胡七",666));
map4.put("name", new Stu("王八",999));
arrayList3 = new ArrayList<HashMap<String, Stu>>();
arrayList3.add(map3);
arrayList3.add(map4);
String filenameString = getHcExternalFile("ddddd", "/object" + ".obj");
final File file = new File(filenameString);
but1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 序列化
try {
FileOutputStream fis = new FileOutputStream(file);
ObjectOutputStream ois = new ObjectOutputStream(fis);
// ois.writeObject(arrayList);
ois.writeObject(arrayList3);
ois.close();
fis.close();
System.out.println("系列化结束");
} catch (Exception e) {
e.printStackTrace();
}
}
});
but2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
// arrayList2 = (ArrayList<HashMap<String, Object>>) ois.readObject();
arrayList4 = (ArrayList<HashMap<String, Stu>>) ois.readObject();
ois.close();
fis.close();
// if (arrayList2 != null) {
// tv2.setText(arrayList2.get(0).get("name").toString());
// }
if (arrayList4 != null) {
for (int i = 0; i < arrayList4.size(); i++) {
HashMap<String, Stu> fffHashMap=arrayList4.get(i);
for (String key : fffHashMap.keySet()) {
Stu sssStu=fffHashMap.get(key);
System.out.println("key= "+ key + " and value= " +sssStu.getAge()+" "+sssStu.getName() );
}
}
Stu ssstStu=arrayList4.get(0).get("name");
tv2.setText(ssstStu.getAge()+" "+ ssstStu.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public static String getHcExternalFile(String subFolder, String fileName) {
try {
String subFolderPath = getSDCardPath() + "/handcent/" + subFolder
+ "/";
File fi = new File(subFolderPath);
if (!fi.exists()) {
fi.mkdirs();
}
return fi.getAbsolutePath() + fileName;
} catch (Exception exp) {
exp.printStackTrace();
return null;
}
}
public static String getSDCardPath() {
if (mSDCARD == null) {
mSDCARD = Environment.getExternalStorageDirectory().toString();
if (mSDCARD == null) {
mSDCARD = "/sdcard";
}
}
return mSDCARD;
}
}
class Stu implements Serializable{
int age;
String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Stu(){
}
public Stu(String n,int a){
name=n;
age=a;
}
}
2、布局文件
main2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/tv1"
android:layout_width="130dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:text="系列化"
android:gravity="center"
android:textColor="#0000ff"
android:textSize="16dp" />
<Button
android:id="@+id/but1"
android:layout_width="130dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="3dp"
android:text="系列化" />
<TextView
android:id="@+id/tv2"
android:layout_width="130dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:text="反系列化"
android:gravity="center"
android:textColor="#0000ff"
android:textSize="16dp" />
<Button
android:id="@+id/but2"
android:layout_width="130dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="3dp"
android:text="反系列化" />
</LinearLayout>
优化
android更好的方式是使用Parcelable;