android path拆分_Android Path

外置SDCard(TF卡)

1. SDCard的挂载路径(根据系统不同的ROM挂载的路径不同,以下列举几个是从旧系统到新系统的表现形式)

/sdcard/external_sd

/mnt/extSdCard

/sdcard/extSdCard

/storage/sdcard1

2. 获取路径

Android获取外部SDcard的官方调用是 Environment.getExternalStorageDirectory()

但是根据不同机型,是有不同的结果的。

如果手机支持TF卡扩展,并且本身没有大容量存储,比如说HTC老款手机 G3之类的,那么获取到的是TF卡的路径。这是对的。

如果手机本身有大容量存储,不论手机是否支持TF卡扩展,比如现在HTC系列高端手机One X,或者920 butterfly系列,那么获取到的是大容量存储的路径。

也就是说,如果手机本身具有大容量存储,又支持TF卡扩展,通过这条命令是无法获取到TF卡信息的。

从系统角度编写了以下方法(不用越狱,不用权限):

try{

Runtime runtime=Runtime.getRuntime();

Process proc= runtime.exec("mount");

InputStream is=proc.getInputStream();

InputStreamReader isr= newInputStreamReader(is);

String line;

String mount= newString();

BufferedReader br= newBufferedReader(isr);while ((line = br.readLine()) != null) {if (line.contains("secure")) continue;if (line.contains("asec")) continue;if (line.contains("fat")) {

String columns[]= line.split(" ");if (columns != null && columns.length > 1) {

mount= mount.concat("*" + columns[1] + "\n");

}

}else if (line.contains("fuse")) {

String columns[]= line.split(" ");if (columns != null && columns.length > 1) {

mount= mount.concat(columns[1] + "\n");

}

}

}

txtView.setText(mount);

}catch(FileNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

获取TF卡

内置SDCard(相对于应用,叫外部存储,应用的内部存储路径为/data)

1.内置SDCard文件路径的挂载路径,至于有个/sdcard/这样的路径,则是指向以下真正路径的一个链接

/mnt/sdcard 或者/storage/emulated/legacy/ (Android < 4.0,根据不同的系统ROM挂载的路径不同)

/storage/sdcard0 或者/storage/emulated/0/ (Android 4.0+,根据不同的系统ROM挂载的路径不同)

2.权限变更

Android 1.0到Android 4.0:写操作受权限WRITE_EXTERNAL_STORAGE保护,写时需加入此权限。

Android 4.1到Android 4.3:读操作也受权限READ_EXTERNAL_STORAGE保护,读时需加入此权限(写权限默认已经包括读权限了)

Android 4.3及以上:应用可以无权限访问自己的外部存储

3.可以获取以下路径(注:"/mnt/sdcard/"字段是上面的挂载路径之一,根据Rom的不同有所不同)

Environment.getRootDirectory().getPath(): /system (系统存储)

Environment.getDataDirectory().getPath() : /data (内部存储、用户数据目录)

Environment.getDownloadCacheDirectory().getPath() : /cache (下载缓存内容目录)

Environment.getExternalStorageDirectory().getPath(): /mnt/sdcard (这个目录很可能当前不能访问,比如这个目录被用户的PC挂载,或者从设备中移除,或者其他问题发生,你可以通过getExternalStorageState()来获取当前状态)

Environment.getExternalStoragePublicDirectory(“test”):  /mnt/sdcard/test (公共数据)

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES): /mnt/sdcard/Pictures

Context.getPackageName() : 

Context.getCacheDir().getPath() : /data/data//cache

Context.getFilesDir().getPath() : /data/data//files  (Context.openFileInput()、.openFileOutput()、.fileList()、.deleteFile(String)可进行操作)

Context.getDatabasePath(“test”).getPath()  : /data/data//databases/test

Context.getDir(“test”, Context.MODE_PRIVATE).getPath() : /data/data//app_test (不存在则创建)

Context.getObbDir().getPath() : /mnt/sdcard/Android/obb/

Context.getExternalCacheDir().getPath() : /mnt/sdcard/Android/data//cache

Context.getExternalFilesDir(null).getPath() = /mnt/sdcard/Android/data//files (需要声明权限)

Context.getExternalFilesDir(“test”).getPath() = /mnt/sdcard/Android/data//files/test(需要声明权限)

注: 对于应用,卸载后该应用的内部存储及外部存储数据都会被删除,但公共数据不会被删除。(即 /data/data//c和/mnt/sdcard/Android/data//下的所有数据会被删除,其它的不会被删除)

根据以上,可以这样获取Cache路径:

/*** 获取cache目录路径*/

public staticString getDiskCachePath(Context context) {if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) || !Environment.isExternalStorageRemovable()) {returncontext.getExternalCacheDir().getPath();

}else{returncontext.getCacheDir().getPath();

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值