Android数据存储之Internal Storage内部存储
2016-06-30 15:57
519 查看
前言:
所有 Android 设备都有两个文件存储区域:“内部”和“外部”存储。这些名称在 Android 早期产生,当时大多数设备都提供内置的非易失性内存(内部存储),以及移动存储介质,比如micro SD 卡(外部存储)。一些设备将永久性存储空间划分为“内部”和“外部”分区,即便没有移动存储介质,也始终有两个存储空间,并且无论外部存储设备是否可移动,API 的行为均一致。内部存储的特点:
不必申请权限,始终可用用户不能访问
一般情况下,别的应用不能访问。只有明确将文件设置为可读或可写,并且别的应用知道您的应用的软件包名称和文件名,才能通过编程访问。
当应用被卸载时,系统会从内部存储中移除您的应用的所有文件。
当您希望用户或其他应用均无法访问您的文件时,内部存储是最佳选择。
使用说明:
import android.content.Context; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; public class InternalStorage { /** * 得到内部存储的根目录:/data/data/包名/files */ public static File getRootDir(Context context) { return context.getFilesDir().getAbsoluteFile(); } /** * 向内部存储根目录下某个文件写入一个字符串 */ public static void writeString2File(Context context, String fileName, String content) { FileOutputStream outputStream = null; try { // fileName只能是文件名,不能包含目录分隔符,该文件若不存在会自动创建 outputStream = context.openFileOutput(fileName, Context.MODE_PRIVATE); outputStream.write(content.getBytes()); } catch (Exception e) { e.printStackTrace(); } finally { if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 读取内部存储根目录下某个文件的内容 */ public static String readStringFromFile(Context context, String fileName) { BufferedReader reader = null; StringBuffer buffer = new StringBuffer(); String line = null; try { // fileName只能是文件名,不能包含目录分隔符,该文件若不存在FileNotFoundException reader = new BufferedReader(new InputStreamReader(context.openFileInput(fileName))); while ((line = reader.readLine()) != null) { buffer.append(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return buffer.toString(); } /** * 得到内部缓存的根目录:/data/data/包名/cache */ public static File getCacheRootDir(Context context) { return context.getCacheDir().getAbsoluteFile(); } /** * 向内部缓存根目录下某个临时文件里写入一个字符串 */ public static void writeString2CacheFile(Context context, String fileName, String content) { FileOutputStream outputStream = null; File file = null; try { file = File.createTempFile(fileName, null, context.getCacheDir()); outputStream = new FileOutputStream(file); outputStream.write(content.getBytes()); } catch (IOException e) { e.printStackTrace(); } finally { if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 得到"/data/data/包名/"下名为app_dir的目录(app_前缀为系统自动添加),若不存在会自动创建 */ public static File getDir(Context context, String dir) { return context.getDir(dir, Context.MODE_PRIVATE); } /** * 删除"/data/data/包名/files/"下名为fileName的文件,删除成功返回true,否则返回false * fileName只能是文件名,不能包含目录分隔符 */ public static boolean deleteFile(Context context, String fileName) { return context.deleteFile(fileName); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories