androidAndroid 获取系统各个目录
Posted opensmarty
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了androidAndroid 获取系统各个目录相关的知识,希望对你有一定的参考价值。
android 各个目录获取
不会创建文件,但是会创建databases目录
getApplicationContext().getDatabasePath("dataBase1.db") 查询的时候要带着.db,也就是包含数据库名字的后缀
会创建目录的的接口(一般的getDir接口都会创建目录)
getApplicationContext().getExternalFilesDir 只要调用到这个借口,就会创建/storage/emulated/0/Android/data/xxx/files文件夹
getApplicationContext().getDir("222", Context.MODE_PRIVATE)
getApplicationContext().getDataDir()(/data/user/0/com.android.test应用启动就有了)
getApplicationContext().getFilesDir()
getApplicationContext().getCacheDir()
getApplicationContext().getCodeCacheDir()
getApplicationContext().getExternalFilesDir("111")
getApplicationContext().getExternalFilesDirs("111")
private void fun() /* * ---111---: getDataDir:cache * ---111---: getDataDir:code_cache * ---111---: getDataDir:files * ---111---: getDataDir:shared_prefs * ---111---: getDataDir:databases * ---111---: getDataDir:app_shared_prefs * ---111---: getDataDir:no_backup */ Arrays.stream(Objects.requireNonNull(getApplicationContext().getDataDir().list())).forEach(dirName -> Log.i("---111---", "getDataDir:" + dirName); ); /* * ---111---: getDataDir.listFiles:/data/user/0/com.android.test/cache * ---111---: getDataDir.listFiles:/data/user/0/com.android.test/code_cache * ---111---: getDataDir.listFiles:/data/user/0/com.android.test/files * ---111---: getDataDir.listFiles:/data/user/0/com.android.test/shared_prefs * ---111---: getDataDir.listFiles:/data/user/0/com.android.test/databases * ---111---: getDataDir.listFiles:/data/user/0/com.android.test/app_shared_prefs * ---111---: getDataDir.listFiles:/data/user/0/com.android.test/no_backup */ Arrays.stream(Objects.requireNonNull(getApplicationContext().getDataDir().listFiles())).forEach(file -> Log.i("---111---", "getDataDir.listFiles:" + file.getAbsolutePath()); ); /** * ---111---: getDataDir:/data/user/0/com.android.test * ---111---: getFilesDir:/data/user/0/com.android.test/files * ---111---: getCacheDir:/data/user/0/com.android.test/cache * ---111---: getCodeCacheDir:/data/user/0/com.android.test/code_cache * ---111---: getDatabasePath:/data/user/0/com.android.test/databases/dataBase1.db * ---111---: getDir:/data/user/0/com.android.test/app_111 */ Log.i("---111---", "getDataDir:" + getApplicationContext().getDataDir().getAbsolutePath()); Log.i("---111---", "getFilesDir:" + getApplicationContext().getFilesDir().getAbsolutePath()); Log.i("---111---", "getCacheDir:" + getApplicationContext().getCacheDir().getAbsolutePath()); Log.i("---111---", "getCodeCacheDir:" + getApplicationContext().getCodeCacheDir().getAbsolutePath()); Log.i("---111---", "getDatabasePath:" + getApplicationContext().getDatabasePath("dataBase1.db").getAbsolutePath()); Log.i("---111---", "getDir***:" + getApplicationContext().getDir("111", Context.MODE_PRIVATE).getAbsolutePath()); /** * ---111---: * getPackageCodePath:/data/app/~~qL08Zu5rx2uuRQWwygZzaQ==/com.android.test-gJJEOgibwXHnKgzLSPlCjQ==/base.apk * ---111---: * getPackageResourcePath:/data/app/~~qL08Zu5rx2uuRQWwygZzaQ==/com.android.test-gJJEOgibwXHnKgzLSPlCjQ==/base.apk */ Log.i("---111---", "getPackageCodePath:" + getApplicationContext().getPackageCodePath()); Log.i("---111---", "getPackageResourcePath:" + getApplicationContext().getPackageResourcePath()); /** * ---111---: getExternalFilesDir(materials):/storage/emulated/0/Android/data/com.android.test/files/materials * ---111---: getExternalFilesDir(null):/storage/emulated/0/Android/data/com.android.test/files * ---111---: getExternalFilesDirs:/storage/emulated/0/Android/data/com.android.test/files * ---111---: getExternalCacheDir:/storage/emulated/0/Android/data/com.android.test/cache * ---111---: getExternalCacheDirs:/storage/emulated/0/Android/data/com.android.test/cache */ Log.i("---111---", "getExternalFilesDir(materials):" + getApplicationContext().getExternalFilesDir("materials").getAbsolutePath()); Log.i("---111---", "getExternalFilesDir(null):" + getApplicationContext().getExternalFilesDir(null).getAbsolutePath()); Arrays.stream(Objects.requireNonNull(getApplicationContext().getExternalFilesDirs(null))).forEach(file -> Log.i("---111---", "getExternalFilesDirs:" + file.getAbsolutePath()); ); Log.i("---111---", "getExternalCacheDir:" + getApplicationContext().getExternalCacheDir().getAbsolutePath()); Arrays.stream(Objects.requireNonNull(getApplicationContext().getExternalCacheDirs())).forEach(file -> Log.i("---111---", "getExternalCacheDirs:" + file.getAbsolutePath()); ); /** * ---111---: getNoBackupFilesDir:/data/user/0/com.android.test/no_backup */ Log.i("---111---", "getNoBackupFilesDir:" + getApplicationContext().getNoBackupFilesDir().getAbsolutePath());
关于外部存储getExternalFilesDir和getExternalFilesDirs区别
首先,简单介绍下两个方法的差异以及主外部存储。
先看下这段代码,
String state = Environment.getExternalStorageState(); File externalFile = context.getExternalFilesDir( null ); File[] externalFiles = context.getExternalFilesDirs( Environment.DIRECTORY_PICTURES ); for (File file : externalFiles) Log.d( TAG, "state="+ state + ";\\nexternalFiles=" + file + ";\\nexternalFile="+externalFile); try FileOutputStream fileOutputStream = new FileOutputStream( new File( file, "aaaa.txt" ) ); fileOutputStream.close(); catch (IOException e) e.printStackTrace();
运行的手机支持SD卡 并插入了一张SD卡,看看运行结果
2019-07-15 14:46:07.819 12704-12704/com.flx.testfilestorage D/flx_storage: state=mounted; externalFiles=/storage/emulated/0/Android/data/com.flx.testfilestorage/files/Pictures; externalFile=/storage/emulated/0/Android/data/com.flx.testfilestorage/files 2019-07-15 14:46:07.821 12704-12704/com.flx.testfilestorage D/flx_storage: state=mounted; externalFiles=/storage/553C-0E05/Android/data/com.flx.testfilestorage/files/Pictures; externalFile=/storage/emulated/0/Android/data/com.flx.testfilestorage/files
从上面看到,getExternalFilesDirs获取的有两个外部存储,getExternalFilesDir是一个。这两个外部存储,一个是主外部存储 即手机本身存储中分为 内部存储和外部存储的 外部存储部分,另一个是SD卡的挂载路径。
getExternalFilesDir(),获取就是主外部存储路径。
getExternalFilesDirs(),获取所有外部存储的路径,包括本身的外部存储 和 扩展出来的存储(如SD卡)。
在一开始就说过,应用存储到外部存储的文件 当应用卸载时只有getExternalFilesDir()路径下的会被删除。
上面代码在log后,所有外部存储路径下 都创建了aaaa.txt的文件,实际操作结果也是符合的,当卸载应用时,/storage/553C-0E05/Android/data/com.flx.testfilestorage/files/这个下面的aaaa.txt 仍然存在的。
参考链接:https://www.cnblogs.com/fanglongxiang/p/11451763.html
Environment获取外部存储
Log.i(TAG, "getExternalStorageDirectory:" + Environment.getExternalStorageDirectory().getAbsolutePath()); Log.i(TAG, "getDataDirectory:" + Environment.getDataDirectory().getAbsolutePath()); Log.i(TAG, "getStorageDirectory:" + Environment.getStorageDirectory()); Log.i(TAG, "getRootDirectory:" + Environment.getRootDirectory()); Log.i(TAG, "getDownloadCacheDirectory:" + Environment.getDownloadCacheDirectory()); Log.i(TAG, "getExternalStoragePublicDirectory(Download):" + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath()); Log.i(TAG, "getExternalStoragePublicDirectory(shared):" + Environment.getExternalStoragePublicDirectory(Environment.MEDIA_SHARED).getAbsolutePath()); // I/MainActivity---test---: getExternalStorageDirectory:/storage/emulated/0 // I/MainActivity---test---: getDataDirectory:/data // I/MainActivity---test---: getStorageDirectory:/storage // I/MainActivity---test---: getRootDirectory:/system // I/MainActivity---test---: getDownloadCacheDirectory:/data/cache // I/MainActivity---test---: getExternalStoragePublicDirectory(111):/storage/emulated/0/111 // I/MainActivity---test---: getExternalStoragePublicDirectory(Download):/storage/emulated/0/Download // I/MainActivity---test---: getExternalStoragePublicDirectory(shared):/storage/emulated/0/shared
众所周知,当前Android分为内部存储和外部存储(手机自带),同时还可以插入sd卡来扩展内存。
现在我们来简单介绍一下getExternalFilesDir(String type)方法:
该方法用于获得外部存储,地址为/storage/emulated/0/Android/data/packageName/files
该方法可传一个String类型的参数,表述为该路径下的文件夹,没有该文件夹会自动创建
使用方法:
String path=context.getExternalFilesDir(null).getAbsolutePath(); File file=new File(path); //输出:path:/storage/emulated/0/Android/data/backageName/files String path2=context.getExternalFilesDir("UniApp").getAbsolutePath(); File file2=new File(path2); //path:/storage/emulated/0/Android/data/packageName/files/UniApp //如uniapp文件夹没有,则会自动创建 String path3=context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(); File file3=new File(path3); //path:/storage/emulated/0/Android/data/packageName/files/Download String path4=context.getExternalFilesDir("").getAbsolutePath()+"/hhhhhh"; File file4=new File(path4); //path:storage/emulated/0/Android/data/packageName/files/hhhhhh //如果没有“hhhhhh”文件夹,则file4.exists()==false;
packageName: app的包名
【参考连接】
Android字典(二)-- 获取系统各个目录
以上是关于androidAndroid 获取系统各个目录的主要内容,如果未能解决你的问题,请参考以下文章