安卓文件操作api与路径对应关系整理

本文详细介绍了Android中各种文件路径(如res/raw、assets、/data/data、SD卡)的操作方法,包括读写API的使用,以及不同机型可能存在的差异。重点讲解了Java IO的字节流和字符流,以及在不同目录下读写文件的注意事项,如数据区文件使用openFileOutput和openFileInput,SD卡文件操作需添加权限。

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

一、简述

  • apk中有两种资源文件,raw下的和assert下的,这些数据只能读取,不能写入,两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。需要注意的是两种资源文件中单个文件大小不能超过1M (Android2.3之前,目前貌似没有这个限制了)。res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类,res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

  • SD卡中的文件使用FileInputStream和FileOutputStream进行文件的操作。

  • 存放在数据区(/data/data/..)的文件只能使用openFileOutput和openFileInput进行操作。注意这里不能使用FileInputStream和FileOutputStream进行文件的操作。

在安卓开发中,经常会用到一些需要操作文件的需求,自己一直对api和文件路径相关的对应关系模糊不清楚,今天有时间来整理记录下,免得以后忘记了。

ps:由于手里没有可以装SD卡的机器,所以以下测试结果均是在无外置sd卡的手机上的测试结果

二、开始测试

首先看以下代码

ps:以下测试机型均为Vivo X9(android 7.1.2 api 25)和MeiZu M3(android 5.1 api 22)

getFilesDir();
getExternalCacheDir();
getPackageCodePath();
getPackageResourcePath();
getCacheDir();
getExternalFilesDir(null);

Environment.getExternalStorageState();
Environment.getExternalStorageDirectory();
Environment.getDataDirectory();
Environment.getDownloadCacheDirectory();
Environment.getRootDirectory();
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

以上几个测试对应的路径为:  

vivo
meizu

 

通过以上观察可以发现,有几个api不同机型还是有点不同的,国产厂商定制系统,进行了对应的修改,使用的时候还是要小心点,防止“掉坑”。

这里吐槽一下CSDN图片编辑太烂,图片格式真心不好调整,想放在一行都不行,下面做一个总结记录:

Environment.getDataDirectory() = 
    /data
Environment.getDownloadCacheDirectory() = 
    /data/cache    (vivo)
    /cache        (meizu)
Environment.getExternalStorageDirectory() = 
    /storage/emulated/0
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) =                                 
     /storage/emulated/0/Pictures
Environment.getRootDirectory() = 
    /system
getPackageCodePath() = 
    /data/app/com.demo.mydemoapplication-1/base.apk
getPackageResourcePath() = 
    /data/app/com.demo.mydemoapplication-1/base.apk
getCacheDir() = 
    /data/data/com.demo.mydemoapplication/cache    (meizu)
    /data/user/0/com.demo.mydemoapplication/cache    (vivo)
getDatabasePath(“test”) = 
    /data/data/com.demo.mydemoapplication/databases/test
getDir(“test”, Context.MODE_PRIVATE) =     
    /data/data/com.demo.mydemoapplication/app_test
getExternalCacheDir() = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值