File 文件处理

482 查看

将静态文件作为资源添加

如果应用程序需要外部文件资源,那么可以通过将其放置在项目层次结构的 res/raw 文件夹中,从而在自己的分发中包含它。

Resources r = getResources();
InputStream file = r.openRawResource(R.raw.filename);


使用特定于应用程序的文件夹存储文件

Android 下提供了两种创建文件对象:getDirgetExternalFilesDir,两个方法都返回一个 File 对象,每个对象都有指向内部或外部存储的目录路径。当应用程序被卸载后,存储在这些目录下的文件都将被删除。

以上两种方法都接收一个字符串参数,指定用于存放文件的子路径,在 Environment 类中引入了许多 DIRECTORY_[Category]字符串常量,这些常量用来表示标准目录名称,例如:下载目录、图片目录、影视目录、音乐目录、拍照目录

存储在应用程序文件夹中的文件应该市特定于父应用程序的而且通常不会被媒体扫描。

getExternalFilesDir 方法是在 API Level 8 中引入的。要想支持较早的平台版本,可以调用 Environment.getExternalStorageDirectory() 获取外部存储根路径。
最好在应用程序自己的子目录下存储特定于该应用程序的数据,即:/android/data/data/Your Package Path/files
如果使用上面方式,当应用程序被卸载时不会将自动删除该应用程序的文件。


创建私有的应用程序

Android 提供了 openFileInputopenFileOutput 方法来简化从应用程序沙箱中的文件读取和写入数据流。
创建 FileOutputStream 时,如果你指定的文件名不存在,Android 会为你创建。对于已经存在的文件的默认行为就是覆盖它;想要在文件末尾追加内容,可以指定模式为 Context.MODE_APPEND
默认情况下,使用 openFileOutput 方法创建的文件对于调用程序市私有的,其他应用程序都无法访问。在不同应用程序间共享文件的标准方式是使用一个 Context Provider。

  • Context.MODE_WORLD_READABLE 创建一个可读的公共访问的 FileOutputStream
  • Context.MODE_WORLD_WRITEABLE 创建一个可写的公共访问的 FileInputStream
  • Context.MODE_APPEND 创建一个可以追加的 FileOutputStream
  • Context.PRIVATE 创建私有的文件


使用应用程序文件缓存

Android 提供了一个可管理的内部缓存,分别调用 getCacheDirgetExternalCacheDir 方法可以从当前上下文中访问它们。存储在缓存中的文件,在应用程序被卸载时都会被删除。当系统运行在低可用存储空间时,存储在内部缓存中的文件可能被系统所删除;存储在外部缓存中的文件则不会被删除。

这两种情况下,这是用来监控和管理缓存的大小和寿命很好的方式,当超出合理的最大缓存的大小的时候去删除文件。


存储公共可读的文件

API Level 8 还提供了一个便捷的方法 Environment.getExternalStoragePublicDirectory,可以用来找到存储应用程序文件的路径。方便返回每个类型文件的存储路径。
下面是 Environment 常用文件类型的常量:

  • DIRECTORY_ALARMS 警示音
  • DIRECTORY_DCIM 拍照和视频
  • DIRECTORY_DOCUMENTS 文档文件
  • DIRECTORY_DOWNLOADS 下载文件
  • DIRECTORY_PICTURES 图片文件
  • DIRECTORY_MOVIES 电影文件
  • DIRECTORY_NOTIFICATIONS 代表用户选择的通知音和可用的音频文件
  • DIRECTORY_RINGTONES 代表用户可选择的铃声和可用的音频文件
  • DIRECTORY_PODCASTS 代表播客的音频文件
  • DIRECTORY_MUSIC 音乐文件