Java tutorial
//package com.java2s; //License from project: Open Source License import android.os.Environment; import android.util.Log; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class Main { private static final String TAG = "DeviceInfoUtil"; private static String exSdCardPath = ""; public static String getExSdCardPath() { if ("".equals(exSdCardPath)) { ArrayList<String> paths = (ArrayList<String>) getExtSDCardPaths(); if (paths.size() != 0) { exSdCardPath = paths.get(0) + "/"; } else { exSdCardPath = null; } } return exSdCardPath; } public static List<String> getExtSDCardPaths() { List<String> paths = new ArrayList<String>(); String extFileStatus = Environment.getExternalStorageState(); File extFile = Environment.getExternalStorageDirectory(); if (extFileStatus.endsWith(Environment.MEDIA_UNMOUNTED) && extFile.exists() && extFile.isDirectory() && extFile.canWrite()) { paths.add(extFile.getAbsolutePath()); } try { // obtain executed result of command line code of 'mount', to judge // whether tfCard exists by the result Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec("mount"); InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line = null; int mountPathIndex = 1; while ((line = br.readLine()) != null) { // format of sdcard file system: vfat/fuse if ((!line.contains("fat") && !line.contains("fuse") && !line.contains("storage")) || line.contains("secure") || line.contains("asec") || line.contains("firmware") || line.contains("shell") || line.contains("obb") || line.contains("legacy") || line.contains("data")) { continue; } String[] parts = line.split(" "); int length = parts.length; if (mountPathIndex >= length) { continue; } String mountPath = parts[mountPathIndex]; if (!mountPath.contains("/") || mountPath.contains("data") || mountPath.contains("Data")) { continue; } File mountRoot = new File(mountPath); if (!mountRoot.exists() || !mountRoot.isDirectory() || !mountRoot.canWrite()) { continue; } boolean equalsToPrimarySD = mountPath.equals(extFile.getAbsolutePath()); if (equalsToPrimarySD) { continue; } paths.add(mountPath); } } catch (IOException e) { Log.e(TAG, "IOException:" + e.getMessage()); } return paths; } }