Android如何獲取所有存儲(chǔ)卡掛載路徑
最近因項(xiàng)目需求,需要在存儲(chǔ)卡查找文件,經(jīng)測(cè)試發(fā)現(xiàn)部分手機(jī)掛載路徑查找不到,這里分享一個(gè)有效的方法。
/**
?*?獲取所有存儲(chǔ)卡掛載路徑
?*?@return
?*/
????public?static?ListgetMountPathList()?{??
????????ListpathList?=?new?ArrayList();??
????????final?String?cmd?=?"cat?/proc/mounts";??
????????Runtime?run?=?Runtime.getRuntime();//取得當(dāng)前JVM的運(yùn)行時(shí)環(huán)境?
????????try?{??
????????????Process?p?=?run.exec(cmd);//執(zhí)行命令??
????????????BufferedInputStream?inputStream?=?new?BufferedInputStream(p.getInputStream());??
????????????BufferedReader?bufferedReader?=?new?BufferedReader(new?InputStreamReader(inputStream));??
??
????????????String?line;??
????????????while?((line?=?bufferedReader.readLine())?!=?null)?{??
????????????????//?獲得命令執(zhí)行后在控制臺(tái)的輸出信息??
????????????????Logger.i(line);??
????????????????//輸出信息內(nèi)容:??/data/media?/storage/emulated/0?sdcardfs?rw,nosuid,nodev,relatime,uid=1023,gid=1023?0?0
????????????????String[]?temp?=?TextUtils.split(line,?"?");??
????????????????//分析內(nèi)容可看出第二個(gè)空格后面是路徑??
????????????????String?result?=?temp[1];??
????????????????File?file?=?new?File(result);??
????????????????//類型為目錄、可讀、可寫,就算是一條掛載路徑
????????????????if?(file.isDirectory()?&&?file.canRead()?&&?file.canWrite())?{??
???????????????? Logger.d("add?-->?"+file.getAbsolutePath());??
????????????????????pathList.add(result);??
????????????????}??
??
????????????????//?檢查命令是否執(zhí)行失敗
????????????????if?(p.waitFor()?!=?0?&&?p.exitValue()?==?1)?{??
????????????????????//?p.exitValue()==0表示正常結(jié)束,1:非正常結(jié)束??
???????????????? Logger.e("命令執(zhí)行失敗!");??
????????????????}??
????????????}??
????????????bufferedReader.close();??
????????????inputStream.close();??
????????}?catch?(Exception?e)?{??
???????? Logger.e(e.toString());??
???????? //命令執(zhí)行異常,就添加默認(rèn)的路徑
????????????pathList.add(Environment.getExternalStorageDirectory().getAbsolutePath());??
????????}
????????return?pathList;??
????}




