Android使用Linux mount获取SdCard存储文件夹
Android的智能手机各不同样。如今非常多Android智能手机都是自带存储,有的还带有扩展内存的Sdcard卡槽。
在Android开发中,非常多时候依据Android提供的获取SdCard存储方法获取不到不到存储文件夹的位置,因为Android的系统是linux系统,所以我想到使用linux命令mouunt来获取linux的挂载文件夹。
这样呢。基本上在Android上都能够获取到应用数据存放的文件夹。
使用命令获取到的文件夹我并没有遍历。假设你还是获取不到,能够把mount获去到的全部文件夹都遍历一次。
File sdcard ;
@SuppressLint("SdCardPath")
public File getSdCardFile() {
if (sdcard != null) {
return sdcard;
}
List<String> list = getExtSDCardPath();
boolean isRun = true;
if (list.size() > 0) {
sdcard = new File(list.get(list.size() - 1));
if (sdcard.isDirectory()) {
if (sdcard.getFreeSpace() == 0) {
isRun = true;
} else {
isRun = false;
}
}
}
if (isRun) {
sdcard = Environment.getExternalStorageDirectory();
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
sdcard = new File("/sdcard/");
log.e("sdcard spance:" + sdcard.getFreeSpace());
if (sdcard.getFreeSpace() == 0) {
sdcard = new File("/sdcard1/");
log.e("sdcard1 space:" + sdcard.getFreeSpace());
}
if (sdcard.getFreeSpace() == 0) {
sdcard = new File("/sdcard2/");
log.e("sdcard2 space:" + sdcard.getFreeSpace());
}
}
}
log.e("data:" + sdcard.getAbsolutePath());
return sdcard;
}
public List<String> getExtSDCardPath() {
List<String> lResult = new ArrayList<String>();
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
if (line.contains("extSdCard")) {
String[] arr = line.split(" ");
String path = arr[1];
if (path.lastIndexOf("extSdCard") == path.length() - 9) {
File file = new File(path);
if (file.isDirectory()) {
lResult.add(path);
}
}
} else if (line.contains("/sdcard")) {
String[] arr = line.split(" ");
String path = arr[1];
if (path.lastIndexOf("/sdcard") == path.length() - 6) {
File file = new File(path);
if (file.isDirectory()) {
lResult.add(path);
}
} else {
String number = path.substring(path.lastIndexOf("/sdcard") + 7);
try {
Integer.parseInt(number);
File file = new File(path);
if (file.isDirectory()) {
lResult.add(path);
}
} catch (Exception e) {
}
}
}
}
isr.close();
} catch (Exception e) {
}
return lResult;
}
只是,首选获取存储还是先使用Android提供的方法。推断并获取Sdcard文件夹。
//推断sdcard是否存在
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
//假设存在。获取存储File文件夹
Environment.getExternalStorageDirectory();
希望能够帮助到大家,对你有帮助或者认为值得借鉴的。能够在下方点个赞!谢谢。。!
如有转载请著名来自http://blog.csdn.net/qxs965266509
Android使用Linux mount获取SdCard存储文件夹的更多相关文章
- Android 获取SDCard中某个目录下图片
本文介绍Android开发中如何获取SDCard中某目录下的所有图片并显示出来,下面的我们提供的这个函数是通用的,只要提供路径就可以查询出该目录下所有图片的路径信息,并保存到一个List<Str ...
- Android:StatFs类 获取系统/sdcard存储空间信息
在存储文件时,为了保证有充足的存储空间大小,通常需要知道系统内部或者sdcard的剩余存储空间大小,这里就需要用到StatFs类. 1. 判断 SDCard 是否存在,并且是否具有可读写权限 /** ...
- Android之获取sdcard卡的信息
public static SDCardInfo getSDCardInfo() { String sDcString = android.os.Environment.getExternalStor ...
- Android 运行 Linux 可执行程序
/**************************************************************************** * Android 运行 Linux 可执行 ...
- 深入学习Android系统上mount命令的使用
博客链接:http://blog.csdn.net/qq1084283172/article/details/52493227 在Android系统的预装apk病毒和elf病毒的清除时,经常需要先获取 ...
- [转] Android SDK manager 无法获取更新版本列表
打开这个网址(LINK)就可以看到adt的详细信息. 或者直接在你的eclipse的Help > Install New Software里面add,地址直接输入 https://dl-ss ...
- android常用Linux命令
安卓下面有个软件叫终端模拟器,其实就是Linux下的命令行,使用这些命令能有效处理问题. 1.基本知识 “/”,这个英文字母斜杠指的是根目录,类似Windows的C:\,但是Linux下只有一个根目录 ...
- android 程序更新(没有sdcard)
今天总结一下我们写的程序需要更新(默认用户已经安装上旧版本了),而用户更新时却没有sdcard的情况,如果有sdcard,那就不用废话了... 先说一下软件更新的基本原理,从服务器下载一个程序的apk ...
- SD卡路径问题以及如何获取SDCard 内存
昨天在研究拍照后突破的存储路径的问题,开始存储路径写死为: private String folder = "/sdcard/DCIM/Camera/"(SD ...
随机推荐
- QWidget QMainWindow QDialog 三者区别
Qt类是一个提供所需的像全局变量一样的大量不同的标识符的命名空间.通常情况下,你可以忽略这个类.QObject和一些其它类继承了它,所以在这个Qt命名空间中定义的所有标识符通常情况下都可以无限制的使用 ...
- php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
网上有很多php文件上传的类,文件上传处理是php的一个特色(至少手册上是将此作为php特点来展示的,个人认为php在数组方面的优异功能更有特 色),学php的人都知道文件上传怎么做,但很多人在编程中 ...
- SQL 测试
1.SQL 指的是? 您的回答:Structured Query Language 2.哪个 SQL 语句用于从数据库中提取数据? 您的回答:SELECT 3.哪条 SQL 语句用于更新数据库中的数据 ...
- Android 动画效果 及 自定义动画
1. View动画-透明动画效果2. View动画-旋转动画效果3. View动画-移动动画效果4. View动画-缩放动画效果5. View动画-动画效果混合6. View动画-动画效果侦听7. 自 ...
- Android自定义View基础
自定义控件, 视频教程 http://www.jikexueyuan.com/course/1748.html 1. 编写自定义view 2. 加入逻辑线程 3. 提取和封装自定义view 4. 利用 ...
- 访问Github过慢解决
在这个地址查找响应最快的地址:http://tool.chinaz.com/dns?type=1&host=assets-cdn.github.com&ip= 查找:assets-cd ...
- 在iOS7中修改状态栏字体的颜色-b
状态栏的字体为黑色: UIStatusBarStyleDefault 状态栏的字体为白色: UIStatusBarStyleLightContent 一.在 info.plist 中,将 View ...
- iOS中浅淡UIApplication单例-b
在iOS的操作系统中 每一个程序都对应一个application单例,每一个application都对应一个Appdelegate代理,在代理中控制程序的各个状态.我们在程序中获取Applicatio ...
- Yosemite重置Dock的命令
备忘 defaults write com.apple.dock ResetLaunchPad -bool true killall Dock
- 转:.NET中使用Redis (一)
原文来自于:http://blog.jobbole.com/83821/ 原文出处: 寒江独钓 欢迎分享原创到伯乐头条 Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博.Gi ...