本地存储(1) - File

Android 的存储分为三类:内存、内置|外置SD 卡,应用安装后,系统会根据应用的包名在内存创建一个/data/data/包名/的文件夹,默认私有的,用于存储一些简单的文本数据或者二进制数据.

我们知道直接File file = new File(“info.txt”);

会报文件找不到的异常,因为这样写会被创建到手机内部存储的根目录里面,但是内部存储根目录是只读不可写的。

优化:File file = new File(getFileDir(),“info.txt”);

目录:/data/data/<包名>/files/info.txt--->getFileDir()+”info.txt”

 

一、 files

1. Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象。

2. Context.openFileInput()与Context.openFileOutput(),只能读取和写入files下的文件,返回的是FileInputStream和FileOutputStream对象。

3. Context.fileList(),返回files下所有的文件名,返回的是String[]对象。

4. Context.deleteFile(String),删除files下指定名称的文件。

5. Context.getExternalFilesDir()方法可以获取到   SDCard/Android/data/youPackageName/files/ 目录,一般放一些长时间保存的数据

 

二、cache

1. Context.getCacheDir(),该方法返回   /data/data/youPackageName/cache的File对象,当存储空间不足,系统自动将之清除。

 

2. Context.getExternalCacheDir(),该方法返回  SDCard/Android/data/youPackageName/cache/目录,一般存放临时缓存数据,当我们使用外部存储时,应该先判断外部存储介质是否存在,同时还要加入对sd卡的读写权限。

 

三、shared_prefs

context.getSharedPreferences(name,mode)//该方法返回  data/data/包名/shared_prefs 的SharedPreferences对象

context.deleteSharedPreferences(name)

 

四、databases

context.getDataDir() 该方法返回data/data/包名/databases对象

context.getDatabasePath(name)

context.deleteDatabase(name)

 

五、custom dir

getDir(String name, int mode),返回    /data/data/youPackageName/ 下的指定名称的文件夹File对象,如果该文件夹不存在则用指定名称创建一个新的文件夹。

 

六、文件权限

MODE_PRIVATE:说明该文件只能被当前的应用程序所读写

MODE_APPEND:以追加方式打开该文件,应用程序可以向该文件中追加内容。

MODE_WORLD_READABLE:该文件的内容可以被其他的应用程序所读取

MODE_WORLD_WRITEABLE:该文件的内容可以被其他的应用程序所读、写

 

在SD卡中存数据尽量在getExternalStorageDirectory()文件下.应用删除时会清空此文件夹下数据

常用的

context.getExternalFilesDir(type) ///storage/emulated/0/Android/data/应用包名/files

context.getExternalCacheDir() ///storage/emulated/0/Android/data/应用包名/cache

 

应用设置中清除缓存 ->清除APP运行过程中所产生的临时数据

应用设置中清除数据 ->清除数据才是真正的删除了本地保存的数据(/data/user/0/packname/和/storage/emulated/0/Android/data/packname/文件里的数据会全部删除,包括cache,files,lib,db , shared_prefs等)

 

不同系统的sd卡路径不同参考 https://blog.csdn.net/u010937230/article/details/73303034/

 

参考:https://www.jianshu.com/p/80e10b3dbba5

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值