实现JSON数据的存储和读取

事前准备:

//创建一个Crime类
public class Crime {
    private String mTitle;
    private UUID mUUID;
    private Date mDate;
    private boolean isSolved;

    public Crime(){
        mUUID = UUID.randomUUID();
        mDate = new Date();
    }
}
//创建CrimeLab类 以单例的方式存储一堆Crime
public class CrimeLab {
    private static CrimeLab sCrimeLab;

    private ArrayList<Crime> mCrimeItems;
    private Context mContext;

    private CrimeLab(Context context){
        mContext = context;
        mCrimeItems = new ArrayList<>();
        for (int i=0; i<20; ++i){
            Crime crime = new Crime();
            crime.setTitle("#Crime"+i);
            crime.setIsSolved(i % 2 == 0 ? true : false);
            mCrimeItems.add(crime);
        }//创建20个Crime
    }
}

1.将Crime对象存储到File中并读取

前提知识:

1.context.openFileOuputStream();

http://blog.sina.com.cn/s/blog_6e5195850100zssn.html

//2.Criem类 创建 toJson()方法

public JsonObject toJson(){
    JsonObject object = new JsonObject();
    object.put("CrimeTitle",mTitle);
    object.put("CrimeDate",mDate);
    .....
    return object;
}//将Crime转化成JsonObject

3.JsonToken
   将文本解析为json格式的类。

使用:

//创建JsonCrime
public JsonCrime{
   private String mFileName = "...";  
   private Context mContext;

   public JsonCrime(String fileName,Context context){
     mFileName = fileName;
     mContext = context; 
  }  
   //将Crime对象的数据保存到File中
   public saveCrime(ArrayList<Crime> crimeItems){
        JsonArray jsonArray = new JsonArray();
        for (Crime c:crimeItems){
            jsonArray.put(c.toJson);
        }//将全部的Crime放入jsonArray中
         FileOutputStream fos = context.openFileOutput(String fileName,int mode);//取得文件的输出流
        Writer writer = new OutputStreamWriter(fos);//字节流变成字符流
        String data = jsonArray.toString;//重点:array可以转化成String类型
        writer.write(data);//将jsonArray的信息写入到文件中
  }  
  
  //从File中读取数据
  public ArrayList<Crime> loadCrime(){
     FileInputStream is = mContext.openFileInputStream();
     Reader reader = new InputStreamReader(is);//字节流转化成字符流
     BufferedInputStream bis = new BufferedInputStream(reader);//套一层缓冲流
     StringBuilder sb = new StringBuilder();
     while((String str = bis.readLine()) != null){
          sb.append(str);
     }
     JsonArray jsonArray =(JsonArray)new JsonToken(sb.toString).nextValue();
     //将String类型转成json类型的方法
     .....
  }
}
    

 

posted @ 2016-03-03 15:28  技术丶从积累开始  阅读(860)  评论(0编辑  收藏  举报