文件保存,也算是比较常见的,也比较方便的保存方式。
在Android中,我们可以通过文件保存json数据来实现本地缓存
public class FileUtil {
public static final String CACHE = "cache";
public static final String ICON = "icon";
public static final String ROOT = "csdn";
public static void saveLocal(String json, int index) {
BufferedWriter bw = null;
try {
File dir = FileUtil.getCacheDir();
// 在第一行写一个过期时间
File file = new File(dir, "_" + index); // /mnt/sdcard/googlePlay/cache/home_0
FileWriter fw = new FileWriter(file);
bw = new BufferedWriter(fw);
bw.write(System.currentTimeMillis() + 1000 * 100 + "");
bw.newLine();// 换行
bw.write(json);// 把整个json文件保存起来
bw.flush();
bw.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(bw);
}
}
public static String loadLocal(int index) {
// 如果发现文件已经过期了 就不要再去复用缓存了
File dir = FileUtil.getCacheDir();// 获取缓存所在的文件夹
File file = new File(dir, "_" + index);
try {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
long outOfDate = Long.parseLong(br.readLine());
if (System.currentTimeMillis() > outOfDate) {
return null;
} else {
String str = null;
StringWriter sw = new StringWriter();
while ((str = br.readLine()) != null) {
sw.write(str);
}
return sw.toString();
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取图片的缓存的路径
*
* @return /mnt/sdcard/csdn/icon 或者/data/data/com.csdndatasave/cache/icon
*/
public static File getIconDir() {
return getDir(ICON);
}
/**
* 获取缓存路径 或者 /data/data/com.csdndatasave/cache/cache
*
* @return /mnt/sdcard/csdn/cache
*/
public static File getCacheDir() {
return getDir(CACHE);
}
public static File getDir(String cache) {
StringBuilder path = new StringBuilder();
if (isSDAvailable()) {
path.append(Environment.getExternalStorageDirectory()
.getAbsolutePath());
path.append(File.separator);// '/'
path.append(ROOT);// /mnt/sdcard/
path.append(File.separator);
path.append(cache);// /mnt/sdcard/GooglePlay/cache
} else {
File filesDir = APP.getInstance().getCacheDir(); // cache getFileDir file
path.append(filesDir.getAbsolutePath());// /data/data/com.itheima.googleplay/cache
path.append(File.separator);///data/data/com.itheima.googleplay/cache/
path.append(cache);///data/data/com.csdndatasave/cache/cache
}
File file = new File(path.toString());
if (!file.exists() || !file.isDirectory()) {
file.mkdirs();// 创建文件夹
}
return file;
}
private static boolean isSDAvailable() {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
return true;
} else {
return false;
}
}
接下来我们只要去调用saveDir和loadDir就可以啦
FileUtil.saveLocal(myData,1);
String local = FileUtil.loadLocal(1);