您的位置:首页 > Web前端 > JavaScript

加载与存储本地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目录
代码地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: