用于长时间使用的apk,并且有规律性的数据
1,逐行读取文件内容
//首先定义一个数据类型,用于保存读取文件的内容 class WeightRecord { String timestamp; float weight; public WeightRecord(String timestamp, float weight) { this.timestamp = timestamp; this.weight = weight; } } //开始读取 private WeightRecord[] readLog() throws Exception { ArrayList<WeightRecord> result = new ArrayList<WeightRecord>(); File root = Environment.getExternalStorageDirectory(); if (root == null) throw new Exception("external storage dir not found"); //首先找到文件 File weightLogFile = new File(root,WeightService.LOGFILEPATH); if (!weightLogFile.exists()) throw new Exception("logfile ‘"+weightLogFile+"‘ not found"); if (!weightLogFile.canRead()) throw new Exception("logfile ‘"+weightLogFile+"‘ not readable"); long modtime = weightLogFile.lastModified(); if (modtime == lastRecordFileModtime) return lastLog; // file exists, is readable, and is recently modified -- reread it. lastRecordFileModtime = modtime; // 然后将文件转化成字节流读取 FileReader reader = new FileReader(weightLogFile); BufferedReader in = new BufferedReader(reader); long currentTime = -1; //逐行读取 String line = in.readLine(); while (line != null) { WeightRecord rec = parseLine(line); if (rec == null) Log.e(TAG, "could not parse line: ‘"+line+"‘"); else if (Long.parseLong(rec.timestamp) < currentTime) Log.e(TAG, "ignoring ‘"+line+"‘ since it‘s older than prev log line"); else { Log.i(TAG,"line="+rec); result.add(rec); currentTime = Long.parseLong(rec.timestamp); } line = in.readLine(); } in.close(); lastLog = (WeightRecord[]) result.toArray(new WeightRecord[result.size()]); return lastLog; } //解析每一行 private WeightRecord parseLine(String line) { if (line == null) return null; String[] split = line.split("[;]"); if (split.length < 2) return null; if (split[0].equals("Date")) return null; try { String timestamp =(split[0]); float weight = Float.parseFloat(split[1]) ; return new WeightRecord(timestamp,weight); } catch (Exception e) { Log.e(TAG,"Invalid format in line ‘"+line+"‘"); return null; } }
2,保存为文件
public boolean logWeight(Intent batteryChangeIntent) { Log.i(TAG, "logBattery"); if (batteryChangeIntent == null) return false; try { FileWriter out = null; if (mWeightLogFile != null) { try { out = new FileWriter(mWeightLogFile, true); } catch (Exception e) {} } if (out == null) { File root = Environment.getExternalStorageDirectory(); if (root == null) throw new Exception("external storage dir not found"); mWeightLogFile = new File(root,WeightService.LOGFILEPATH); boolean fileExists = mWeightLogFile.exists(); if (!fileExists) { if(!mWeightLogFile.getParentFile().mkdirs()){ Toast.makeText(this, "create file failed", Toast.LENGTH_SHORT).show(); } mWeightLogFile.createNewFile(); } if (!mWeightLogFile.exists()) { Log.i(TAG, "out = null"); throw new Exception("creation of file ‘"+mWeightLogFile.toString()+"‘ failed"); } if (!mWeightLogFile.canWrite()) throw new Exception("file ‘"+mWeightLogFile.toString()+"‘ is not writable"); out = new FileWriter(mWeightLogFile, true); if (!fileExists) { String header = createHeadLine(); out.write(header); out.write(‘\n‘); } } Log.i(TAG, "out != null"); String extras = createBatteryInfoLine(batteryChangeIntent); out.write(extras); out.write(‘\n‘); out.flush(); out.close(); return true; } catch (Exception e) { Log.e(TAG,e.getMessage(),e); return false; } }