您的位置:首页 > 移动开发 > Android开发

获取android 内置与外置SD卡路径及可用空间

2015-08-13 16:26 561 查看
现在android手机SD卡,分为内置与外置,在写程序时或许要用到,就写了一下,话不多说,直接代码

Environment.getExternalStorageDirectory()getRootDirectory()//获取手机根目录
Environment.getExternalStorageDirectory()getExternalStorageDirectory()//获取SD卡根目录

/**
* 获取手机自身内存路径
*
*/
public static String getPhoneCardPath() {
return Environment.getDataDirectory().getPath();

}

/**
* 获取sd卡路径 双sd卡时,根据”设置“里面的数据存储位置选择,获得的是内置sd卡或外置sd卡
*
* @return
*/
public static String getNormalSDCardPath() {
return Environment.getExternalStorageDirectory().getPath();
}

/**
* 获取sd卡路径 双sd卡时,获得的是外置sd卡
*
* @return
*/
public static String getSDCardPath() {
String cmd = "cat /proc/mounts";
Runtime run = Runtime.getRuntime();// 返回与当前 Java 应用程序相关的运行时对象
BufferedInputStream in = null;
BufferedReader inBr = null;
try {
Process p = run.exec(cmd);// 启动另一个进程来执行命令
in = new BufferedInputStream(p.getInputStream());
inBr = new BufferedReader(new InputStreamReader(in));

String lineStr;
while ((lineStr = inBr.readLine()) != null) {
// 获得命令执行后在控制台的输出信息
Log.i("CommonUtil:getSDCardPath", lineStr);
if (lineStr.contains("sdcard")
&& lineStr.contains(".android_secure")) {
String[] strArray = lineStr.split(" ");
if (strArray != null && strArray.length >= 5) {
String result = strArray[1].replace("/.android_secure",
"");
return result;
}
}
// 检查命令是否执行失败。
if (p.waitFor() != 0 && p.exitValue() == 1) {
// p.exitValue()==0表示正常结束,1:非正常结束
Log.e("CommonUtil:getSDCardPath", "命令执行失败!");
}
}
} catch (Exception e) {
Log.e("CommonUtil:getSDCardPath", e.toString());
// return Environment.getExternalStorageDirectory().getPath();
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (inBr != null) {
inBr.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return Environment.getExternalStorageDirectory().getPath();
}

// 查看所有的sd路径
public String getSDCardPathEx() {
String mount = new String();
try {
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;
BufferedReader br = new BufferedReader(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");
}
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mount;
}

// 获取当前路径,可用空间
public static long getAvailableSize(String path) {
try {
File base = new File(path);
StatFs stat = new StatFs(base.getPath());
long nAvailableCount = stat.getBlockSize()
* ((long) stat.getAvailableBlocks());
return nAvailableCount;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息