Android开发文件目录总结

开发中经常会遇到本地文件读取或者文件存取的需求,下面就简单坐下总结。

raw与assets文件夹

有些文件我们会选择放在本地资源文件夹中,随着源码一起打包,比如铃声、字体、html等等,这样就不用到服务器上获取。Android系统对资源文件(res/raw和assets文件夹下)的大小有限制,默认最大仅支持1M的文件。否则apk程序将报错。
一般我们也不会把这些文件打包到apk中,无疑会增加apk的大小。

res/raw和assets的不同点:

  1. res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
  2. res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

读取res/raw下的文件资源

InputStream is = getResources().openRawResource(R.id.filename);  
Uri uri=Uri.paese("android.resource://包名/"+R.raw.filename);

读取assets下的文件资源,通过以下方式获取输入流来进行写操作

AssetManager am = null;  
am = getAssets();  
InputStream is = am.open("filename");  

下面再看看应用缓存文件夹

内部存储和外部存储

手机有内部存储(Internal storage)和外部存储(External storage)之分,内部储存只能被app所访问,外部储存是挂载在系统上面的储存,可热插拔,当取下挂载的这部分后,就无法对其进行访问了。
内部存储的文件通过root之后才能看到

Internal storage路径

getCacheDir():/data/data/packagename/cache
getFilesDir():/data/data/packagename/files

External storage路径

getExternalCacheDir():
/storage/emulated/0/Android/data/packagename/files/cache

Environment.getExternalStorageDirectory():
/storage/emulated/0

getExternalFilesDir(Environment.DIRECTORY_PICTURES):
/storage/emulated/0/Android/data/packagename/files/Pictures

Environment.getExternalStorageDirectory():
/storage/emulated/0

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES):
/storage/emulated/0/Movies

由于外部存储可能不存在,所以在进行文件读写是前需要做一些判断:

public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}
/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}

/data/data/packagename 和 /storage/emulated/0/Android/data/packagename/在app被卸载的时候都会清除掉
内部储存一般放一些重要的数据库文件以及一些用户配置文件,并且不要太大
外部储存一般放对应app才能打开的文件,卸载是也会清理掉
共享文件一般放/storage/emulated/0/对应文件夹上面,其他app也可以共享

你可能感兴趣的:(Android开发文件目录总结)