
分为:内部存储和外部存储
如何区分内部存储和外部存储:可以从物理和逻辑区分
从物理的角度区分,内部存储就是手机自带存储空间,外部存储就是外部接入的存储空间例如SD卡
从逻辑意义上区分,data,system 目录就是手机的内部存储,而 mnt 或者 storage目录下的sdcard0指向的sdcard目录就是外部存储。如果是手机自带的外部存储被称为机身外部存储,外置的SD卡则称之为外部存储。当然两者都称为外部存储也没关系。这里描述的内部存储和机身外部存储都属于机身存储;
逻辑区分是从44以上版本开始的;
获取内部存储路径和api对应关系
1,通过Environment
2,通过上下文Context
BuildVERSION_CODESLOLLIPOP及以上版本新增的API
BuildVERSION_CODESN及以上版本新增的API
特点:
1、内部存储路径中的文件是分类存储的,我们无法干涉,除了cache目录,别的目录系统不会自动创建
2、除了files目录,别的目录我们几乎都是无法手动 *** 作的
3、别的App几乎无法访问内部存储中的数据,除了用非法手段或者我们主动暴露
4、内部存储目录下的文件夹及文件会随着app的卸载而被系统自动删除
外部存储又可分为共有目录和私有目录;
私有目录
私有目录:不需要访问权限
Android 在外部存储空间中也提供了特殊目录供App存放私有文件,该路径为:/storage/emulated/0/Android/data/包名/
注意:应用安装之后/storage/emulated/0/Android/data/是没有对应的应用文件夹的,需要手动调用对应的API创建;
获取私有目录路径
共有目录
共有目录:需要申请权限才能访问
权限:60以上需要动态申请
获取共有目录的API 29中已过时:
package comhangchengutil;
import javaioFile;
import javaioFileOutputStream;
import javaioIOException;
import javaioInputStream;
import javautilArrayList;
import javautilHashMap;
import javautilList;
import androidappActivity;
import androidcontentContext;
import androidcontentresAssetManager;
public class GetfilesFromAssets {
private Activity activity;
private String[] files;
public GetfilesFromAssets(Context context) {
thisactivity = (Activity) context;
}
// public void deepFile(Context ctxDealFile, String path) {
// try {
// String str[] = ctxDealFilegetAssets()list(path);
// if (strlength > 0) {// 如果是目录
// File file = new File("/data/" + path);
// filemkdirs();
// for (String string : str) {
// path = path + "/" + string;
// Systemoutprintln("zhoulc:\t" + path);
// // textViewsetText(textViewgetText()+"\t"+path+"\t");
// deepFile(ctxDealFile, path);
// path = pathsubstring(0, pathlastIndexOf('/'));
// }
// } else {// 如果是文件
// InputStream is = ctxDealFilegetAssets()open(path);
// FileOutputStream fos = new FileOutputStream(new File("/data/"
// + path));
// byte[] buffer = new byte[1024];
// int count = 0;
// while (true) {
// count++;
// int len = isread(buffer);
// if (len == -1) {
// break;
// }
// foswrite(buffer, 0, len);
// }
// isclose();
// fosclose();
// }
// } catch (IOException e) {
// // TODO Auto-generated catch block
// eprintStackTrace();
// }
// }
public String[] getfileFromAssets(String path) {
AssetManager assetManager = activitygetAssets();
// String[] files;
try {
files = assetManagerlist(path);
} catch (IOException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return files;
}
public List listHtmlOfAssets() {
List list = new ArrayList();
files = getfileFromAssets("html");
for (int i = 0; i < fileslength; i++) {
HashMap map = new HashMap();
mapput("htmlname", files[i]);
listadd(map);
}
return list;
}
}
android的硬存储是按照linux系统规则来划分的,用于存储客户信息和客户安装的应用的是/data分区,你如果使用的是c程序的话,应该是在/data/app之类的下面,我手头没有板子没法给你查。文件夹是google约定俗成的,不同厂家应该都是一样的路径。如果是厂家定制的应用则是在/system分区下,路径应该是/system/app下。
如果你是一个android系统学习者,而不是应用开发者的话,我建议看看以下system/etc/initrc对于你会有很大的帮助。
以上就是关于Android存储及路径全部的内容,包括:Android存储及路径、Android如何获取asset目录下所有文件的路径、Android:怎么获取当前文件(类)所在的目录的完整路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)