Android中的内部存储与外部存储

1.运行内存:Memory,用来运行程序,不能用来长期存储数据,一旦断电(关机),内存中所有数据将丢失。
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





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值