加载与存储本地JSON文件
2015-09-08 23:38
681 查看
创建能以JSON文件格式保存的实体
public Crime(JSONObject json) throws JSONException{ mId = UUID.fromString(json.getString(JSON_ID)); if(json.has(JSON_TITLE)) mTitle = json.getString(JSON_TITLE); mSolved = json.getBoolean(JSON_SOLVED); mDate = new Date(json.getLong(JSON_DATE)); } /** * 将Crime对象数据转换为可写入JSON文件的JSONObject对象数据。 */ public JSONObject toJson() throws JSONException{ JSONObject json = new JSONObject(); json.put(JSON_ID, mId.toString()); json.put(JSON_TITLE, mTitle); json.put(JSON_SOLVED, mSolved); json.put(JSON_DATE, mDate.getTime()); return json; }
创建JSON文件的保存与读取类
package com.huangfei.criminalintent; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONTokener; import android.content.Context; /** * JSON文件的保存与读取 */ public class CriminalIntentJSONSerializer { private Context mContext; private String mFilename; public CriminalIntentJSONSerializer(Context context, String filename) { super(); mContext = context; mFilename = filename; } /** * JSON文件的读取 * @throws JSONException */ public ArrayList<Crime> loadCrimes() throws IOException, JSONException{ ArrayList<Crime> crimes = new ArrayList<Crime>(); BufferedReader reader = null; try { FileInputStream in = mContext.openFileInput(mFilename); reader = new BufferedReader(new InputStreamReader(in)); StringBuilder jsonString = new StringBuilder(); String line = null; while((line = reader.readLine()) != null){ jsonString.append(line); } JSONArray array = (JSONArray) new JSONTokener(jsonString.toString()).nextValue(); for (int i = 0; i < array.length(); i++) { crimes.add(new Crime(array.getJSONObject(i))); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if(reader != null) reader.close(); } return crimes; } /** * JSON文件的保存 */ public void saveCrimes(ArrayList<Crime> crimes) throws JSONException, IOException { JSONArray array = new JSONArray(); for (Crime crime : crimes) { array.put(crime.toJson()); } Writer writer = null; try { /** * Context.openFileOutput(...)方法接收文件名(不能是目录即不能包含/)以及文件操作模式参数,会自动将传入的文件名附加到应用沙盒文件 * (每个应用的沙盒文件目录都是设备/data/data/目录的子目录,且默认以应用包命名。如:/data/data/com.huangfei.criminalintent。 * 只有在设备被root了,其他应用和用户才能随意获取沙盒中的文件。) * 目录路径之后,然后在新路径下创建并打开文件,等待数据写入。 */ FileOutputStream out = mContext.openFileOutput(mFilename, Context.MODE_PRIVATE); writer = new OutputStreamWriter(out); writer.write(array.toString()); } finally{ if(writer != null) writer.close(); } } }
JSON文件的读取与保存
mSerializer = new CriminalIntentJSONSerializer(mAppContext, FILENAME); try { mCrimes = mSerializer.loadCrimes(); } catch (Exception e) { mCrimes = new ArrayList<Crime>(); e.printStackTrace(); }
public boolean saveCrimes(){ try { mSerializer.saveCrimes(mCrimes); Log.d(TAG, "crimes saved to file"); return true; } catch (Exception e) { Log.e(TAG, "Error saving crimes: ", e); return false; } }
Context类提供的基本文件或目录处理方法
方法 | 使用目的 |
---|---|
File getFileDir() | 获取/data/data/packagename/files目录 |
FileInputStream openFileInput(String name) | 打开现有文件进行读取 |
FileOutputStream openFileOutput(String name, int mode) | 打开文件进行写入,若不存在就创建它 |
File getDir(String name, int mode) | 获取/data/data/packagename/目录的子目录(若不存在就创建它) |
String[] fileList() | 获取/data/data/packagename/files目录下的文件列表 |
File getCacheDir() | 获取/data/data/packagename/cache目录 |
相关文章推荐
- JavaScript之isPrototypeOf和instanceof
- JavaScript技巧续
- JS抽奖二次方缓动测试
- JSONP跨域,实现cookies共享
- JavaScript技巧(三)续
- javascript实现日期时间动态显示示例代码
- 正则总结:正则表达式在js中的高级应用
- js带前后翻页的图片切换效果代码分享
- js打开应用
- js淡入淡出焦点图幻灯片效果代码分享
- javaScript DOM编程
- javascript主要事件表
- XStream和Json
- JSP基本语句用法总结
- JavaScript权威设计--JavaScript类型,值,变量(简要学习笔记三)
- JSP
- EL表达式与JSTL
- Ajax和JSON
- BOM和DOM
- JavaScript对象