永发信息网

如何获得在Android的内部和外部SD卡路径

答案:2  悬赏:70  手机版
解决时间 2021-02-05 01:26
如何获得在Android的内部和外部SD卡路径
最佳答案

public static String getPhoneCardPath(){
return Environment.getDataDirectory().getPath();
}

public static String getNormalSDCardPath(){
return Environment.getExternalStorageDirectory().getPath();
}

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;
}
全部回答
android手机获取自带存储路径和sd卡存储路径的方式是:调用environment.getexternalstoragedirectory(),返回的存储目录并不是系统内置的sd卡目录。 1.一部分手机将emmc存储挂载到 /mnt/external_sd 、/mnt/sdcard2 等节点,而将外置的sd卡挂载到 environment.getexternalstoragedirectory()这个结点。 此时,调用environment.getexternalstoragedirectory(),则返回外置的sd的路径。 2.而另一部分手机直接将emmc存储挂载在environment.getexternalstoragedirectory()这个节点,而将真正的外置sd卡挂载到/mnt/external_sd、/mnt/sdcard2 等节点。 此时,调用environment.getexternalstoragedirectory(),则返回内置的sd的路径。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
五菱征程能装215/65r15轮胎吗
中宁天仁商务宾馆地址有知道的么?有点事想过
2016年上海开放16个公园都是哪些公园
卡拉切昆达里亚怎么去啊,有知道地址的么
哥哥在爱尔兰今年春节要回来,让他代购什么最
中宁金聚徳快捷宾馆地址有知道的么?有点事想
路虎揽胜前灯大概多少钱
忌俗的意思是什么啊?知道的请说下!
从哲学角度看,漫画中的地方保护A平安无事
每次我淘宝上买了东西,确认后,就有短信发过
红外线体温计什么牌子比较好
噶举派现在活佛是谁?俗家是什么地方的?
中宁南街招待所地址好找么,我有些事要过去
四柱吉神凶煞 年柱 劫煞 天医 禄神 月柱 灾煞
PROE 如何画直直线!我画了看上去好象是一段段
推荐资讯
佛山市瀚众汽车贸易服务有限公司这个地址在什
什么品牌的液晶电视音响效果最好?
请问苏州哪里能禅修?
vivo root该用什么软件
工作表格的行列间隔求和怎么求?
羊肉什么时候是淡季
下列食物链能成立的是DA. 阳光→草→兔→狐B.
厨房下水道因为掉了一个布刷子导致堵了,请问
自选海鲜面馆地址有知道的么?有点事想过去
保险公司业债总结会
Even if;only Even if you may manage to ge
丙加偏旁可以组什么词
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?