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

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

相关文章推荐

C#路径文件目录IO常见操作汇总.

  • 2010年01月13日 14:24
  • 51KB
  • 下载

Matlab对文件目录路径的操作

1、filesep 用于返回当前平台的目录分隔符,Windows是反斜杠(\),Linux是斜杠(/)。 2、fullfile 用于将若干字符串连接成一个完整的路径。例如: >> f=full...
  • SMF0504
  • SMF0504
  • 2016年07月11日 17:40
  • 230

matlab 文件目录及路径操作

1、 filesep 用于返回当前平台的目录分隔符,Windows是反斜杠(),Linux是斜杠(/)。 2、 fullfile 用于将若干字符串连接成一个完整的路径...

eclipse,工程/文件目录,相对路径(真心的详细~)

【1】从零开始建工程   最简单的:http://www.cnblogs.com/alipayhutu 其中d)换作: ApplicationContext context = new C...

Linux文件目录与路径

相对路径与绝对路径 绝对路径:路径的写法(一定由根目录 / 写起),例如: /usr/share/doc 这个目录。 相对路径:路径的写法(不是由 / 写起),例如由 /usr/share/doc 要...

matlab对文件目录路径的操作

1、        filesep 用于返回当前平台的目录分隔符,Windows是反斜杠(\),Linux是斜杠(/)。 2、        fullfile 用于将若干字符串连接成一个完整的路...

[绍棠] iOS获取各种文件目录路径的方法和NSFileManager类的有关用法

IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tm...

eclipse工程/文件目录,相对路径(真心的详细~)

1. 获取系统根目录 System.getProperty("user.home");例如输出,C:\Users\hutu    2. 获取工程目录 System.getProperty(...
  • H12KJGJ
  • H12KJGJ
  • 2016年12月18日 14:43
  • 270

Android文件目录详解

  • 2013年01月23日 15:51
  • 28KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 文件目录路径
举报原因:
原因补充:

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