【Android数据存储】内部存储

1、概述

  默认情况下,保存到内部存储的文件是应用的私有文件,其他应用(和用户)不能访问这些文件。 当用户卸载您的应用时,这些文件也会被移除。

2、写入文件

  要创建私有文件并写入到内部存储:

  1. 使用文件名称和操作模式调用 openFileOutput()。 这将返回一个 FileOutputStream
  2. 使用 write() 写入到文件。
  3. 使用 close() 关闭流式传输。

  简单示例如下:  

String FILENAME = "hello_file";
String string = "hello world!";

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

   MODE_PRIVATE 将会创建文件(或替换具有相同名称的文件),并将其设为应用的私有文件。 其他可用模式包括:MODE_APPENDMODE_WORLD_READABLE和 MODE_WORLD_WRITEABLE

   备注:自 API 级别 17 以后,常量 MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 已被弃用。从 Android N 开始,使用这些常量将会导致引发 SecurityException。这意味着,面向 Android N 和更高版本的应用无法按名称共享私有文件,尝试共享“file://”URI 将会导致引发FileUriExposedException。 如果您的应用需要与其他应用共享私有文件,则可以将 FileProvider 与 FLAG_GRANT_READ_URI_PERMISSION 配合使用。另请参阅共享文件。

3、读取文件   

  要从内部存储读取文件:

  1. 调用 openFileInput() 并向其传递要读取的文件名称。 这将返回一个 FileInputStream
  2. 使用 read() 读取文件字节。
  3. 然后使用 close() 关闭流式传输。

   上面的方法主要用于读取主动写入的文件。

  静态文件读取:

  如果在编译时想要保存应用中的静态文件,请在项目的 res/raw/ 目录中保存该文件。 可以使用 openRawResource() 打开该资源并传递 R.raw.<filename> 资源 ID。 此方法将返回一个 InputStream,您可以使用该流式传输读取文件(但不能写入到原始文件)

4、其他实用方法 

  getFilesDir():获取在其中存储内部文件的文件系统目录的绝对路径。

  getDir():在内部存储空间内创建(或打开现有的)目录。

  deleteFile():删除保存在内部存储的文件。

  fileList():返回您的应用当前保存的一系列文件。

 

posted @ 2017-09-05 23:32  星辰大海mark-shi  阅读(267)  评论(0编辑  收藏  举报