Android 与文件相关的知识

文章出自:android中的文件操作详解以及内部存储和外部存储


内部存储(internal storage

内部存储并不是指内存。

内部存储位于系统中很特殊的一个位置,如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的,当这个应用被卸载以后,内部存储中的文件也会被删除。

从技术上来讲,如果你在创建内部存储文件的时间,将文件属性设置成可读,其它app能够访问自己应用的数据,前提是他知道你这个应用的包名,如果是可读的,便可以读取该文件。

如果一个文件的属性是私有(private)的,那么即使知道包名,其它应用也无法访问。

内部存储空间十分有限,因此显得可贵,另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机也就无法使用了。所以对于内部存储空间,我们要尽量避免使用。SgaredPreference和SQLite数据库都是存储在内部存储空间上的。

内部存储一般都是用context获取的,也就是当前的上下文环境中,不是用Context这个类。

用例:

     在Activity中:

            1).  //获取APP的内部存储空间

                             File file = getFileDir();   

             2). //读写应用在内部存储空间上的文件

                             openFileOutPut(String name,int mode);   

                             openFileInput(String name);

             3). //列出所有已经创建的文件

                             String files[] = fileList();

             4). //删除创建的文件

                              boolean flag = deleteFile(String fileName);

              5). //根据名字获取文件目录(可根据返回的File对象,获取到其操作路径)

                              File file = getDir(String name,int mode);

外部存储(external Storage

所有的安卓设备都有外部存储和内部存储,不管安卓手机是否有可移动的SDCard,他们总是有外部存储和内部存储。

最关键的是,我们都是可以通过相同的api来访问可移动的sdCard或者手机自带的存储(外部存储)

外部存储中的文件是可以被用户或者其它应用程序所修改的,有两种类型的文件(或者目录)

1.公共文件(public Files):

            文件是可以被自由访问,且文件的数据对其它应用或者用户来说都是有意义的,当应用被卸载之后,其卸载前所创建的文件仍然保留。比如照相机应用,拍下来的照片大家都可以访问,如果把照相机卸载以后,照片仍然存在,这就是公共文件。

创建方法:

 File   file = Environment.getExternalStoragePublicDirectory(Enviroment.DIRECTORY_PICTU

                                                                                                                   RES);

File  finalFile = new File(file,"公共文件");


2.私有文件(private Files):

             其实由于是外部存储的原因,即便是这种类型的文件也能被其它程序访问,只不过一个程序私有的文件对其他应用是没有访问价值的(恶意程序除外)。外部存储上,应用私有文件的价值在于卸载之后,这些文件也会被删除,类似于内部存储。

在使用外部存储之前,需要先检查外部存储的当前状态,以判断是否可用

boolean mExternalStorageAvailable =false;               //外部存储是否可用

boolean mExternalStorageWriteable =false;              //外部存储是否可写

String state = Environment.getExternalStorageState();    //获取外部存储状态

if (Environment.MEDIA_MOUNTED.equals(state)) {          

         //存储媒体已经挂载,并且挂载点可读/写。

        mExternalStorageAvailable = mExternalStorageWriteable =true;

}else if(Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){

        //存储媒体已经挂载,挂载点只读。

        mExternalStorageAvailable =true;

        mExternalStorageWriteable =false;

}else{

        //存储媒体没有挂载。

        mExternalStorageAvailable = mExternalStorageWriteable =false;

}

-------------------------------------------------------------------------------------------------------

Environment类中提供了几个静态常量用于标识外部存储的状态,这些状态都是String类型

MEDIA_BAD_REMOVAL 在没有挂载前存储媒体已经被移除。

MEDIA_CHECKING 正在检查存储媒体。

MEDIA_MOUNTED 存储媒体已经挂载,并且挂载点可读/写。

MEDIA_MOUNTED_READ_ONLY 存储媒体已经挂载,挂载点只读。

MEDIA_NOFS 存储媒体是空白或是不支持的文件系统。

MEDIA_REMOVED 存储媒体被移除。

MEDIA_SHARED 存储媒体正在通过USB共享。

MEDIA_UNMOUNTABLE 存储媒体无法挂载。

MEDIA_UNMOUNTED 存储媒体没有挂载。

-------------------------------------------------------------------------------------------------------

Environment中还提供了Android标准目录的路径,以String类型提供。

DIRECTORY_ALARMS 系统提醒铃声存放的标准目录。

DIRECTORY_DCIM 相机拍摄照片和视频的标准目录。

DIRECTORY_DOWNLOADS 下载的标准目录。

DIRECTORY_MOVIES 电影存放的标准目录。

DIRECTORY_MUSIC 音乐存放的标准目录。

DIRECTORY_NOTIFICATIONS 系统通知铃声存放的标准目录。

DIRECTORY_PICTURES 图片存放的标准目录

DIRECTORY_PODCASTS 系统广播存放的标准目录。

DIRECTORY_RINGTONES 系统铃声存放的标准目录。

-------------------------------------------------------------------------------------------------------

static File getDataDirectory() 获得data的目录(/data)。

static File getDownloadCacheDirectory() 获得下载缓存目录。(/cache)

static File getExternalStorageDirectory() 获得外部存储媒体目录。(/mnt/sdcard or /storage/sdcard0)

static File getRootDirectory() 获得系统主目录(/system)

-------------------------------------------------------------------------------------------------------

context.getCacheDir() 获取应用程序自己的缓存目录

context.getExternalCacheDir() 获取应用程序在外部存储的存储目录

这两个方法是通过上下文对象Context获取的,只要应用程序被卸载,这两个目录下的文件都要被清空。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容