历史记录这里包含两个要点,一个是记录的组织,一个是记录写入文件,下面就这两方面详述。
- 记录的组织
/**
* Created by icecreamco on 2016/1/11.
*/
public class Records {
public static final String RECORDS = "records";
private static Records records;
private Context context;
private LinkedList<int[]> recordlist;
private JsonSaveAndRead jsonSaveAndRead;
/*
* 构造函数
*/
private Records(Context c) {
context = c;
jsonSaveAndRead = new JsonSaveAndRead(c, "records");
LinkedList<int[]> list;
if ((list = jsonSaveAndRead.read()) != null) {
recordlist = list;
} else {
recordlist = new LinkedList<>();
}
}
/*
* get单例
*/
public static Records getRecords(Context c) {
if (records == null) {
records = new Records(c.getApplicationContext());
}
return records;
}
/*
* add list
*/
public void add(int[] record) {
recordlist.addFirst(record);
jsonSaveAndRead.save(recordlist);
}
/*
* delete
*/
public void delete(int index) {
recordlist.remove(index);
jsonSaveAndRead.save(recordlist);
}
public void delete(int[] record) {
for (int[] exist : recordlist) {
if (record[19] == exist[19]) {
int i = 0;
for (i = 0; i < 19; i++) {
if (record[i] != exist[i])
break;
}
if (i == 19) {
recordlist.remove(exist);
break;
}
}
}
jsonSaveAndRead.save(recordlist);
}
/*
* clear
*/
public void clear() {
recordlist.clear();
jsonSaveAndRead.save(recordlist);
}
/*
* isExist()
*/
public boolean isExist(int[] record) {
for (int[] exist : recordlist) {
if (record[19] == exist[19]) {
int i = 0;
for (i = 0; i < 19; i++) {
if (record[i] != exist[i])
break;
}
if (i == 19) {
return true;
}
}
}
return false;
}
/*
* getrecordsnum
*/
public int getRecordsNum() {
return recordlist.size();
}
/*
* getrecordslist
*/
public LinkedList<int[]> getRecordlist() {
return recordlist;
}
}
2 . 记录写入文件
/**
* Created by icecreamco on 2016/1/11.
*/
public class JsonSaveAndRead {
public static final String TAG = "JsonSaveAndRead";
public static final String RECORD = "record";
private Context context;
private String filename;
/*
* 构造函数
*/
public JsonSaveAndRead(Context c, String s) {
context = c;
filename = s;
}
/*
* save
*/
public void save(LinkedList<int[]> records) {
StringBuilder str = new StringBuilder();
for (int[] record : records) {
for (int x : record) {
str.append(x);
str.append(" ");
}
}
Writer writer = null;
try{
OutputStream out = context.openFileOutput(filename, context.MODE_PRIVATE);
writer = new OutputStreamWriter(out);
writer.write(str.toString());
} catch (IOException e) {
Log.i(TAG, "IOException");
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
Log.i(TAG, "close error");
}
}
}
/*
* read
*/
public LinkedList<int[]> read() {
LinkedList<int[]> records = new LinkedList<>();
BufferedReader reader = null;
try {
InputStream in = context.openFileInput(filename);
reader = new BufferedReader(new InputStreamReader(in));
StringBuilder s = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null)
s.append(line);
String str = s.toString();
// parse
Scanner scan = new Scanner(str);
while (scan.hasNextInt()) {
int[] record = new int[20];
for (int i = 0; i < 20; i++) {
record[i] = scan.nextInt();
}
records.add(record);
}
} catch (IOException e) {
Log.i(TAG, "IO error");
} finally {
try{
if (reader != null)
reader.close();
} catch (IOException e) {
Log.i(TAG, "close error");
}
}
return records;
}
}