1、概述
默认情况下,保存到内部存储的文件是应用的私有文件,其他应用(和用户)不能访问这些文件。 当用户卸载您的应用时,这些文件也会被移除。
2、写入文件
要创建私有文件并写入到内部存储:
- 使用文件名称和操作模式调用
openFileOutput()
。 这将返回一个FileOutputStream
。 - 使用
write()
写入到文件。 - 使用
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_APPEND
、MODE_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、读取文件
要从内部存储读取文件:
- 调用
openFileInput()
并向其传递要读取的文件名称。 这将返回一个FileInputStream
。 - 使用
read()
读取文件字节。 - 然后使用
close()
关闭流式传输。
上面的方法主要用于读取主动写入的文件。
静态文件读取:
如果在编译时想要保存应用中的静态文件,请在项目的 res/raw/
目录中保存该文件。 可以使用 openRawResource()
打开该资源并传递 R.raw.<filename>
资源 ID。 此方法将返回一个 InputStream
,您可以使用该流式传输读取文件(但不能写入到原始文件)
4、其他实用方法
getFilesDir():
获取在其中存储内部文件的文件系统目录的绝对路径。
getDir():
在内部存储空间内创建(或打开现有的)目录。
deleteFile():
删除保存在内部存储的文件。
fileList():
返回您的应用当前保存的一系列文件。