关闭

Android 文件目录路径

131人阅读 评论(0) 收藏 举报
分类:

不要硬编码(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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30302次
    • 积分:553
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:40篇
    • 译文:0篇
    • 评论:0条