Android手机如何获取手机内存路径和sd卡路径

来源:互联网 发布:昆山编程培训 编辑:程序博客网 时间:2024/05/16 07:32
/**
     * 获取手机自身内存路径
     * 
     */

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;

    }



原文出处:wulongtiantang

0 0