博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓学习笔记——文件存储读写
阅读量:2113 次
发布时间:2019-04-29

本文共 2889 字,大约阅读时间需要 9 分钟。

前言:

一般使用SharedPreferences方式存储的内容是一些键值对(key-value),使用SQLite数据库来操作存储数据表,而有时候我们却要存储的是一些文件,这时候我们可以采用文件存储的方式。

Java提供了一套完整的IO流体系,用来对文件进行操作。Android同样支持以这种方式来访问手机存储器上的文件,包括内部存储器和外部存储器(即SD卡)

文件存储的特点:

优点:可以处理大量数据

缺点:当文件更新或者格式改变会造成大量的编程工作

文件存储可以分成两类 :

1、将文件存储在应用程序内,在Android系统中,这些文件保存在**/data/data//files/目录下,称为File存储,默认情况下,文件是不能在不同应用程序间共享的,当该应用程序卸载时,这些文件将被删掉

2、将文件存储在外接的存储设备中,也就是存储在SDCard**存储卡中,称为SDCard存储。

Android中读取/写入文件的方法:

Android中读取/写入文件的方法与Java中的I/O是一样的。

利用Context或者Activity中的openFileInput()方法与FileInputStream对象来读取设备上的文件

利用Context或者Activity中的openFileOutput()方法与FileOutputStream对象来创建设备上的文件

context是个抽象类,而Activity、Service、Application都是其子

FileOutputStream openFileOutput(String name, int mode)

保存文件内容,打开指定的私有文件输出流,参数 name为要打开的文件名,不能包含路径分隔符,参数mode为操作模式,有以下保存模式:

  1. Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下写入的内容会覆盖原文件的内容。
  2. Context.MODE_APPEND:检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
  3. Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取。
  4. Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

在使用模式时,可以用"+"来选择多种模式,比如:

openFileOutput(“jay123.txt”, Context.MODE_PRIVATE+Context.MODE_WORLD_READABLE)。

FileInputStream openFileInput(String name)

读取文件内容,打开指定的私有文件输出流,name为要打开的文件名,不能包含路径分隔符。

boolean deleteFile(String name)

删除指定的文件,name为要删除的文件名,不能包含路径分隔符。

File getDir(String name, int mode)

在应用程序的数据文件下获取或创建name对应的子目录。

File getFilesDir()

得到该应用程序数据文件夹的绝对路径。

String[] fileList()

得到该应用程序数据文件夹下的全部文件的文件名。

SDCard存储

前言:

如果想存储的是视频、音乐等需要占用大量存储空间的文件,那么存储到手机内存中显得很不明智,所以我们会将这些大文件数据存储到SD卡中。

SD卡读写步骤

1、在AndroidManifest.xml中添加SD权限,即:创建删除文件权限和写入数据权限。

2、读写前先判断SD卡是否插入,并且可以读写

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

3、获取SD卡的外部目录,同时获取SD卡的路径

Environment.getExternalStorageDirectory().getCanonicalPath()+"/"+fileName

4、使用FileOutputStream,FileInputStream或者FileReader或FileWriter读写SD卡中的文件

Android应用开发中,常使用Environment类去获取外部存储目录,在访问外部存储之前一定要先判断外部存储是否已经是可使用(已挂载&可使用)状态。

以下方法都是static的,可以直接用Environment类名调用。

static File  getDataDirectory()      获得Android下的data文件夹的目录。 static File getDownloadCacheDirectory()     获得AndroidDownload/Cache内容的目录。 static File getExternalStorageDirectory()      获得Android外部存储器也就是SDCard的目录。 static File getRootDirectory()      获得Android下的root文件夹的目录。          getAbsolutePath() 表示获取当前文件的绝对路径+相对路径如果构造的时候是全路径就直接返回全路如果构造时是相对路径,就返回当前目录的路径 + 构造 File 对象时的路径getCanonicalPath():表示获取当前文件的绝对路径,会把 ..\ 、.\ 这样的符号解析掉例如:D:\workspace\Test\TestWeb\src\..\a.txtD:\workspace\Test\TestWeb\a.txtstatic String getExternalStorageState()      获得Android外部存储器的当前状态,有以下保存模式:     Environment.MEDIA_BAD_REMOVAL:在没有正确卸载SDCard之前就移除了。      Environment.MEDIA_CHECKING:正在磁盘检查。      Environment.MEDIA_MOUNTED:已经挂载并且拥有可读可写权限。      Environment.MEDIA_MOUNTED_READ_ONLY:已经挂载, 但只拥有可读权限。      Environment.MEDIA_NOFS:对象空白, 或者文件系统不支持。      Environment.MEDIA_REMOVED:已经移除扩展设备。      Environment.MEDIA_SHARED:如果SDCard未挂载, 同时通过USB大容量存储方式与其他设备共享。      Environment.MEDIA_UNMOUNTABLE:不可以挂载任何扩展设备。      Environment.MEDIA_UNMOUNTED:已经卸载。

转载地址:http://uhvef.baihongyu.com/

你可能感兴趣的文章
如何添加网站favicon.ico图标
查看>>
cvs no such repository 问题
查看>>
MySQL中REGEXP正则表达式
查看>>
服务端UDP双向通信学习资料
查看>>
Mina TCP 编码解码相关资料收集
查看>>
Maven 打包 上传 运行
查看>>
Maven插件wagon-maven-plugin自动化部署
查看>>
使用wagon-maven-plugin插件自动部署项目
查看>>
Maven 打包的三种方式 和 Springboot 分离jar包
查看>>
ActiveMQ中Session设置的相关理解
查看>>
Linux Python 2.7.15
查看>>
Nexus配置Linux Yum Repository
查看>>
Nexus Python pip Repository
查看>>
Linux Mysql 8.0.1
查看>>
Python pymqi 连接 IBM MQ
查看>>
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof 详解
查看>>
Java - JVM TLAB、对象在内存中安置顺序、垃圾收集、回收算法
查看>>
转: 关于Linux与JVM的内存关系分析
查看>>
(转)Java 程序员必备的高效 Intellij IDEA 插件
查看>>
局域网(内网)docker安装及代理访问
查看>>