1.运行内存:Memory,用来运行程序,不能用来长期存储数据,一旦断电(关机),内存中所有数据将丢失。
2.内部存储:InternalStorage,这里所说的内部存储和我们平时的讲的内部存储是不一样的。内部存储位于系统的一个特殊位置,内部存储中根据不同程序包名生成对应该程序包名的目录,该目录中存储的数据文件只能被该程序访问(不同文件操作模式 访问权限不同)。当程序删除时,内部存储中对应该程序的目录下所有数据会被删除。内部存储容量小,尽量减少内部存储的使用,除非是存储重要的数据文件(SQLite和SharedPreferences都是存储在内部存储中。)
2.内部存储:InternalStorage,这里所说的内部存储和我们平时的讲的内部存储是不一样的。内部存储位于系统的一个特殊位置,内部存储中根据不同程序包名生成对应该程序包名的目录,该目录中存储的数据文件只能被该程序访问(不同文件操作模式 访问权限不同)。当程序删除时,内部存储中对应该程序的目录下所有数据会被删除。内部存储容量小,尽量减少内部存储的使用,除非是存储重要的数据文件(SQLite和SharedPreferences都是存储在内部存储中。)
+++将不可见(没有root情况下)的内置存储卡数据统称为内部数据
Context.getFilesDir(): /data/user/0/YourAppPackage/files
Context.getCacheDir(): /data/user/0/YourAppPackage/cache
SQLite: /data/user/0/YourAppPackage/databases
SharedPreferences: /data/user/0/YourAppPackage/shared_prefs
Environment.getDataDirectory(): /data
Environment.getRootDirectory(): /system
Environment.getDownloadCacheDirectory(): /cache
3.外部存储:ExternalStorage,外部存储其实就是我们平时讲的SD卡,然而现在大量的手机都是直接将SD卡固化到手机里面就认为这是内部存储,其实任然还是外部存储,和第二点的内部存储是不同性质的(注意:手机连电脑上或者用文件管理的软件可查看的都是外部存储,在不root情况下就可以查看)。
+++将没有root就可见的内置存储卡和外置存储卡数据统称为外部数据
1.外部私有数据
当程序卸载时,所对应的外部私有数据也会删除。
Context.getExternalCacheDir(): /storage/emulated/0/Android/data/YourAppPackage/cache
Context.getExternalFilesDir(null): /storage/emulated/0/Android/data/YourAppPackage/files
Context.getExternalFilesDir("a"): /storage/emulated/0/Android/data/YourAppPackage/files/a
2.外部公有数据
Environment.getExternalStorageDirectory(): /storage/emulated/0
Environment.getExternalStoragePublicDirectory("a"): /storage/emulated/0/a
PS: Google官方建议我们App的数据应该存储在外部存储的私有目录中该App的包名下,这样当用户卸载掉App之后,相关的数据会一并删除,如果你直接在外部公有存储创建了一个应用的文件夹,那么当你删除应用的时候,这个文件夹就不会被删除。
示例:
public class FilePathActivity extends BaseActivity {
private static final String TAG = "FilePathActivity";
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_empty);
context = this;
Log.i(TAG, context.getFilesDir().toString());
Log.i(TAG, context.getCacheDir().toString());
Log.i(TAG, Environment.getDataDirectory().toString());
Log.i(TAG, Environment.getRootDirectory().toString());
Log.i(TAG, Environment.getDownloadCacheDirectory().toString());
Log.i(TAG, context.getExternalCacheDir().toString());
Log.i(TAG, context.getExternalFilesDir(null).toString());
Log.i(TAG, context.getExternalFilesDir("katherine").toString());
Log.i(TAG, Environment.getExternalStorageDirectory().toString());
Log.i(TAG, Environment.getExternalStoragePublicDirectory("katherine").toString());
}
}
结果:
I/FilePathActivity: /data/user/0/com.katherine.du.everydaystudy/files
I/FilePathActivity: /data/user/0/com.katherine.du.everydaystudy/cache
I/FilePathActivity: /data
I/FilePathActivity: /system
I/FilePathActivity: /cache
I/FilePathActivity: /storage/emulated/0/Android/data/com.katherine.du.everydaystudy/cache
I/FilePathActivity: /storage/emulated/0/Android/data/com.katherine.du.everydaystudy/files
I/FilePathActivity: /storage/emulated/0/Android/data/com.katherine.du.everydaystudy/files/katherine
I/FilePathActivity: /storage/emulated/0
I/FilePathActivity: /storage/emulated/0/katherine