如何获得在Android的内部和外部SD卡路径
答案:2 悬赏:70 手机版
解决时间 2021-02-05 01:26
- 提问者网友:刺鸟
- 2021-02-04 18:43
如何获得在Android的内部和外部SD卡路径
最佳答案
- 五星知识达人网友:洎扰庸人
- 2021-02-04 19:58
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;
}
全部回答
- 1楼网友:渡鹤影
- 2021-02-04 20:25
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的路径。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯