Android文件缓存 Json文件的读写
2015-06-24 15:26
302 查看
在android开发过程中会遇到文件存储这一块的知识!合理的设置缓存不仅可以节省用户流量,也可以在一定程度上优化app的性能、减少服务端的访问压力!
通过对代码的封装,以达到对服务端返回数据的存储来实现本地缓存效果。
具体代码如下:
通过对代码的封装,以达到对服务端返回数据的存储来实现本地缓存效果。
具体代码如下:
<span style="color:#333300;">package com.jingchen.tbviewer.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.StreamCorruptedException; import java.nio.channels.FileChannel; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.os.Environment; public class CacheUtils { private static File CacheRoot; /** * 存储Json文件 * * @param context * @param json * json字符串 * @param fileName * 存储的文件名 * @param append * true 增加到文件末,false则覆盖掉原来的文件 */ public static void writeJson(Context c, String json, String fileName, boolean append) { CacheRoot = Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED ? c .getExternalCacheDir() : c.getCacheDir(); FileOutputStream fos = null; ObjectOutputStream os = null; try { File ff = new File(CacheRoot, fileName); boolean boo = ff.exists(); fos = new FileOutputStream(ff, append); os = new ObjectOutputStream(fos); if (append && boo) { FileChannel fc = fos.getChannel(); fc.truncate(fc.position() - 4); } os.writeObject(json); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (os != null) { try { os.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } /** * 读取json数据 * * @param c * @param fileName * @return 返回值为list */ @SuppressWarnings("resource") public static List<String> readJson(Context c, String fileName) { CacheRoot = Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED ? c .getExternalCacheDir() : c.getCacheDir(); FileInputStream fis = null; ObjectInputStream ois = null; List<String> result = new ArrayList<String>(); File des = new File(CacheRoot, fileName); try { fis = new FileInputStream(des); ois = new ObjectInputStream(fis); while (fis.available() > 0) result.add((String) ois.readObject()); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (StreamCorruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (ois != null) { try { ois.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return result; } }</span><strong style="color: rgb(255, 0, 0);"> </strong>
相关文章推荐
- Android-->.9文件制作,简单粗暴(菜鸟都能秒懂)
- .project
- android Broadcast广播
- Android基础概念Context的作用
- Android Studio如何发布APK
- Android学习笔记05: Android快速自定义控件+实战演示——新手进阶必看!
- android 引用lib里面的jar找不到类
- Android Touch事件传递机制解析
- 一种在android中实现MVP模式的新思路
- Android广播机制:Broadcast
- 关于 ViewGroup 下 onDraw 方法失效
- Ubuntu14.04 Android 源码编译
- android开发使用fragment commit时的一些坑
- Android HAL实例解析
- Android29_Loader
- Android28_Bitmap二次采样
- Android27_OptionsMenu、ContextMenu及PopupWindow自定义菜单
- Android ButterKnife使用
- AndroidManifest.xml文件属性详解
- Android开发Git:代码冲突常见解决方法