1、Environment.getDataDirectory() = /data
这个方法是获取内部存储的根路径
2、Context.getFilesDir().getAbsolutePath() = /data/user/0/packname/files
这个方法是获取某个应用在内部存储中的files路径。
3、getCacheDir().getAbsolutePath() = /data/user/0/packname/cache
这个方法是获取某个应用在内部存储中的cache路径
4、getDir(“myFile”, MODE_PRIVATE).getAbsolutePath() = /data/user/0/packname/app_myFile
这个方法是获取某个应用在内部存储中的自定义路径
Context.getPackageName(); // 用于获取APP的所在包目录
Context.getPackageCodePath(); //来获得当前应用程序对应的apk文件的路径
Context.getPackageResourcePath(); // 获取该程序的安装包路径
Context.getDatabasePath(); //返回通过Context.openOrCreateDatabase创建的数据库文件
Environment.getDataDirectory().getPath(); // 获得根目录/data
Environment.getDownloadCacheDirectory().getPath(); //获得缓存目录/cache
Environment.getExternalStorageDirectory().getPath(); //获得SD卡目录/mnt/sdcard 或者 /storage/emulated/0
Environment.getRootDirectory().getPath(); // 获得系统目录/system
5、Environment.getExternalStorageDirectory().getAbsolutePath() = /storage/emulated/0
这个方法是获取外部存储的根路径,应用卸载,这个不会被删除
6、Environment.getExternalStoragePublicDirectory(“”).getAbsolutePath() = /storage/emulated/0
这个方法是获取外部存储的根路径
7、Context.getExternalFilesDir("").getAbsolutePath() = /storage/emulated/0/Android/data/packname/files
这里的/storage/emulated/0/其实在某些手机上也是在sdcard
这个方法是获取某个应用在外部存储中的files路径,依然是属于该应用的,卸载应用会被删除,这个是不需要获取读写权限的
8、Context.getExternalCacheDir().getAbsolutePath() = /storage/emulated/0/Android/data/packname/cache
这个方法是获取某个应用在外部存储中的cache路径,依然是属于该应用的,卸载应用会被删除,这个是不需要获取读写权限的
清除缓存:我们知道应用程序在运行过程中需要经过很多过程,比如读入程序,计算,输入输出等等,这些过程中肯定会产生很多的数据,
它们在内存中,以供程序运行时调用。所以清除缓存清除的是APP运行过程中所产生的临时数据。
清除数据:清除数据才是真正的删除了我们保存在文件中的数据(永久性数据,如果不人为删除的话会一直保存在文件中)例如当我们在
设置里面清除了某个应用的数据,那么/data/user/0/packname/和/storage/emulated/0/Android/data/packname/下的文件里面的数
据会全部删除,包括cache,files,lib,shared_prefs等等。
当targetSdkVersion=29时,如果应用程序访问外部非私有目录的时候,会报错,
java.io.FileNotFoundException: /storage/emulated/0/min77/51850812e89ff8ead2002c15ebf417ac: open failed: EACCES (Permission denied)
解决办法:
在AndroidManifest.xml中给application设置
android:requestLegacyExternalStorage="true"
或者使用外部存储
比如
Context.getExternalFilesDir("").getAbsolutePath() = /storage/emulated/0/Android/data/packname/files
这个方法是获取某个应用在外部存储中的files路径,依然是属于该应用的,卸载应用会被删除
Context.getExternalCacheDir().getAbsolutePath() = /storage/emulated/0/Android/data/packname/cache
这个方法是获取某个应用在外部存储中的cache路径,依然是属于该应用的,卸载应用会被删除
网友评论