android文件存储以及方法说明

本文详细介绍了Android中如何使用Activity的父类Context提供的openFileOutput()方法进行文件存储,并解释了不同操作模式的区别。同时,文章还探讨了getFilesDir()、getCacheDir()等方法的应用场景,以及外部存储的使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android中activity的父类context提供了一个openFileOutput()方法,用来写入文件,我们知道android对文件存放的位置有着严格的管理,访问共有文件时,必须提供权限,但是通过这个方法就不需要权限,openFileOutput有两个参数,
1.第一个参数是文件名
这个文件名不能包含路径,因为默认创建的文件会放在

/data/data/<package-name>/files/的文件夹下面,下面是我的截图

这里写图片描述

通过outFileOutput的文件就会放在这里,
第二个参数是操作模式
下面是官方给出的文档说明
这里写图片描述

代表的是打开与应用程序包所关联的私有文件,是私有文件,因为使用了内部存储,所以不需要权限,
参数二说明

MODE_PRIVATE:指定同名文件时,会覆盖原先的文件
MODE_APPEND:指定同名文件,会追加内容

剩下的由于存在安全问题,使用会报出安全异常

下面是通过openFileOutPut操作文件的案例

String data="我有一头小毛驴,从来也不骑";
FileOutputStream fileOutputStream = openFileOutput("xiaoxiao", MODE_PRIVATE);
       fileOutputStream.write(data.getBytes());

那么我们就会在内部文件夹下产生一个xiaoxiao的文件,看下图片
这里写图片描述

下面是第二种写法

 File file = new File(getFilesDir(), "user");
       FileOutputStream fileOutputStream1 = new FileOutputStream(file);
       fileOutputStream1.write("生命就是简单简单的生活".getBytes());

图片在上面,可能给更多的是对getFilesDir()这个方法感到好奇,那么看一下文档
这里写图片描述
大致翻译为
返回文件系统目录的绝对路径,其中存储了使用openFileOutput(String, int)创建的文件。由于此路径是内部存储,因此不需要对返回的路径进行读或写操作。
关键的一句是其中存储了使用openFileOutput(String, int)创建的文件,那么我们就能猜到这个方法返回的是/data/data/<package-name>/files这个文件夹,因为openFileOutput的文件就放在这里,
当然不能光想,我们通过程序测试了一下

     File file4=getFilesDir();
        Log.d(TAG, "文件的路径为:"+file4.getPath());
        Log.d(TAG, "是文件夹吗?"+file4.isDirectory());

打印的结果如下这里写图片描述

看来之前的猜想是正确的

之后我继续看了文档,发现了其他的方法

  1. getCacheDir();
  2. getDir();
    然后自己又去测试了,测试代码如下
  File file1 = new File(getCacheDir(), "password");
       fileOutputStream1 = new FileOutputStream(file1);
       fileOutputStream1.write("数据存储技术全方案".getBytes());

       //会在应用程序的文件目录下创建一个文件夹
       File file2 = getDir("chenjing", MODE_PRIVATE);
       fileOutputStream = new FileOutputStream(file2);

之后发生了什么?
一张图让你看懂
这里写图片描述

从上面的图以及自己的代码我们就能看出来

getCacheDir():对应的是/data/data/<package-name>/cache文件夹
getDir():对应的是/data/data/<package-name>.也就是应用程序文件主文件夹,我们创建的chenjing会产生一个文件夹,自动加上app的前缀

之后我又看到了这些
getExternalCacheDir();
getExternalFilesDir();
从字面来理解:得到外部缓存文件夹,获得外部文件夹

 File file1=getExternalCacheDir();
        Log.d("file",file1.getPath());
        //对应的文件夹是/mnt/sdcard/Android/data/com.mingrisoft.myapplication/cache

对应的是sd卡的android/data/<package-name>/cache文件夹,
原来android 在外部存储上会为每一个app 建立私有文件夹 Android/data/应用包名/ 下 当然这里的文件夹虽然是私有,但是对其他人都是可读可写的。所以不太安全 ,同时也会随着应用的的卸载二回被删除

   File file=getExternalFilesDir(null);
        Log.d("file", "外部文件路径"+file.getPath());//外部文件路径/mnt/sdcard/Android/data/com.mingrisoft.myapplication/files

对应的是files文件夹。本质来说和内部存储差不多,只不过更安全

那么如果想要存放公有的文件

公有文件存储必须要声明WRITE_EXTERNAL_STORAGE 权限.


公有文件不属于app 所有。当你的应用被删除的时候应该被保留的文件,如用户的相片,铃声等。
想要获取外部存储的公有文件夹, 你可以通过:下面的程序获得**

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), FILENAME);

这里面使用了Environment类,这个类提供了对环境变量的访问,
看下方法getExternalStoragePublicDirectory(String type)
参数类型
DIRECTORY_MUSIC, DIRECTORY_PODCASTS, DIRECTORY_RINGTONES, DIRECTORY_ALARMS, DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES, DIRECTORY_MOVIES, DIRECTORY_DOWNLOADS, or DIRECTORY_DCIM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值