Android 文件目录路径

原创 2016年05月31日 18:14:29

不要硬编码(hardcode) “/sdcard”; 使用Environment.getExternalStorageDirectory().getPath()  替代

以前的Android(4.1之前的版本)中,SDcard跟路径通过“/sdcard”或者“/mnt/sdcard”来表示,而在Jelly Bean系统中修改为了“/storage/sdcard0”,以后可能还会有多个SDcard的情况。目前为了保持和之前代码的兼容,sdcard路径做了link映射。

为了使您的代码更加健壮并且能够兼容以后的Android版本和新的设备,请通过Environment.getExternalStorageDirectory().getPath()来获取sdcard路径

如果您需要往sdcard中保存特定类型的内容,可以考虑使用Environment.getExternalStoragePublicDirectory(String type)函数,该函数可以返回特定类型的目录,目前支持如下类型:

DIRECTORY_ALARMS //警报的铃声

DIRECTORY_DCIM //相机拍摄的图片和视频保存的位置

DIRECTORY_DOWNLOADS //下载文件保存的位置

DIRECTORY_MOVIES //电影保存的位置, 比如 通过google play下载的电影

DIRECTORY_MUSIC //音乐保存的位置

DIRECTORY_NOTIFICATIONS //通知音保存的位置

DIRECTORY_PICTURES //下载的图片保存的位置

DIRECTORY_PODCASTS //用于保存podcast(博客)的音频文件

DIRECTORY_RINGTONES //保存铃声的位置

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

getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()区别

getCacheDir()方法  用于获取/data/data/包名/cache目录

getFilesDir()方法用于获取/data/data/包名/files目录

应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的;大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?

通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据

通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据

如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。

而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项

如果要保存下载的内容,就不要放在以上目录下

较优秀的程序都会专门写一个方法来获取缓存地址,如下所示:

public File getDiskCacheDir(Context context, String uniqueName) {  
    String cachePath;  
    if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())  
            || !Environment.isExternalStorageRemovable()) {  
        cachePath = context.getExternalCacheDir().getPath();  
    } else {  
        cachePath = context.getCacheDir().getPath();  
    }  
    return new File(cachePath + File.separator + uniqueName);  
}

public String getDiskCacheDir(Contextcontext) {

 String cachePath = null;

//Environment.getExtemalStorageState() 获取SDcard的状态

//Environment.MEDIA_MOUNTED 手机装有SDCard,并且可以进行读写

if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())||!Environment.isExternalStorageRemovable()) {

 cachePath = context.getExternalCacheDir().getPath();

} else {

cachePath = context.getCacheDir().getPath();

}

return cachePath;

}

可以看到,当SD卡存在或者SD卡不可被移除的时候,就调用getExternalCacheDir()方法来获取缓存路径,否则就调用getCacheDir()方法来获取缓存路径。前者获取到的就是/sdcard/Android/data/包名/cache 这个路径,而后者获取到的是/data/data/包名/cache 这个路径。

Environment.getExternalStorageState:mounted 
Environment.getDownloadCacheDirectory().getPath():/cache 
Environment.getDataDirectory().getPath():/data 
Environment.getExternalStorageDirectory().getPath():/mnt/sdcard 
Environment.getExternalStoragePublicDirectory().getPath():/mnt/sdcard/Pictures 
Environment.getRootDirectory().getPath():/system 
Environment.getDownloadCacheDirectory().getAbsolutePath():/cache 
Environment.getDataDirectory().getAbsolutePath():/data 
Environment.getExternalStorageDirectory().getAbsolutePath():/mnt/sdcard 
Environment.getExternalStoragePublicDirectory().getAbsolutePath():/mnt/sdcard/Pictures 
Environment.getRootDirectory().getAbsolutePath():/system 


参考:

http://www.cnblogs.com/mengdd/p/3742623.html

http://blog.csdn.net/guolin_blog/article/details/28863651

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0923/1557.html

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 存储路径选择

Android能用来存储的地方有两个,一个是手机内置的存储空间,一个是外置的SD卡,内置的存储空间一般比较小,所以应用的缓存建议存储在外置的SD卡中。 在Android系统中如何获得存储的路径呢? ...
  • zhuwentao2150
  • zhuwentao2150
  • 2016年07月07日 00:43
  • 3353

Android 保存文件路径

Android保存文件到本地路径问题常见路径例如: application 包名: com.my.company 项目名: chat ...
  • yshxjoy
  • yshxjoy
  • 2017年05月15日 10:11
  • 1560

Android 图片存储到指定路径和相册

我们在平常项目中,可能会存储一些头像,二维码之类的。这篇文章主要也是介绍自己在存储中会遇到的问题以及一些改进方案。1.首先是长按保存:这个可以去参照网络上的,无非是自己先要拼接好一个文件路径。注意:I...
  • huang_xiao_yu
  • huang_xiao_yu
  • 2016年06月13日 14:59
  • 8412

如何获取android项目下某个文件的绝对路径

比如要获取  要获取libjnixcld.so绝对路径 File file=new File("/data/data/com.dtBank.app.service/lib/libjnixcld.so...
  • ly131420
  • ly131420
  • 2014年11月29日 20:06
  • 22061

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

摘要 其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理。根据我的经验,初学者...
  • androidwifi
  • androidwifi
  • 2014年01月01日 02:28
  • 102604

Android--使用手机拍照获取图片路径,小米手机选择照片问题处理

Android开发选取照片问题本文主要记录使用手机自带相机拍照获取返回照片路径,以及从本地相册选取已有照片时返回Intent data; 数据处理 操作。(小米手机获取照片路径与其他手机不一致问题!...
  • github_30662571
  • github_30662571
  • 2016年12月13日 10:25
  • 1716

Android输入文件路径,用户选择方式打开这个文件

直接上代码 MainActivity.java /**  * 输入路径,用户选择方式打开文件  */ public class MainActivity extends Acti...
  • huyao8023
  • huyao8023
  • 2015年05月14日 10:09
  • 915

Android中读取系统图库(包含相册)中的图片,显示图片与图片的路径

最近有一个需求,是类似于手机相机的功能,拍照,多次拍照(调用系统相机只能进行一次拍照),拍照页面显示一个拍照后的缩略图,点击缩略图后进行拍过的照片的筛选(有单选和多选的问题),以及后续操作(设计相关业...
  • ABC__D
  • ABC__D
  • 2016年06月30日 15:48
  • 16733

Android So加载的路径选择以及注意选项

首先我们一般开发会遇见两种APK(其实一般大部分只会遇到一种),一种为系统级APK,另外一种为普通APK。那么这个两种APK跟So加载有什么关系呢?点进来让我们大家一起去细细研究下!...
  • Connery_thunder
  • Connery_thunder
  • 2016年11月05日 21:54
  • 1068

Android中字体文件位置

Android中字体文件位置在framework/base/data/fonts/目录下; 但是ICS上有新加的三种字库比较特殊,位置在external/lohit-fonts/对应目录下; 下表列出...
  • pecke
  • pecke
  • 2013年09月05日 16:24
  • 3320
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 文件目录路径
举报原因:
原因补充:

(最多只允许输入30个字)