手機存儲路徑問題

今天項目一個問題涉及了手機文件存儲,特此記錄一下android

通常手機存儲分爲 內部存儲 和外部存儲sql

內部存儲路徑獲取方式有兩種測試

String url = Environment.getExternalStorageDirectory() + File.separator + "ceshi" + File.separator + "08ea24f490532d2e4d7c69e8b69a8f01.m3u8.sqlite";
Log.e("TAG", "onCreate:------------ " + url);

final File externalStorageDirectory = Environment.getExternalStorageDirectory();
final File ceshi = new File(externalStorageDirectory, "ceshi");
Log.e("TAG", "onCreate:++++++++++++ " + ceshi + File.separator + "08ea24f490532d2e4d7c69e8b69a8f01.m3u8.sqlite");

File directory_pictures = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
Log.e("TAG", "onCreate:------------ " + directory_pictures + File.separator + "08ea24f490532d2e4d7c69e8b69a8f01.m3u8.sqlite");

一二都是同一種的不一樣寫法this

第二種方法是一個更加方便的訪問Android給咱們提供好的一些公共目錄的方法,第一種方式更加靈活,能夠本身指定目錄url

外部存儲又分爲SD卡和擴展卡內存sqlite

擴展內存就是咱們插入的外置SD卡,獲取擴展內存的路徑有點難度,不過Google很牛逼,哈哈,代碼以下:blog

private static String getExtendedMemoryPath(Context mContext) {

    StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
    Class<?> storageVolumeClazz = null;
    try {
        storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
        Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
        Method getPath = storageVolumeClazz.getMethod("getPath");
        Method isRemovable = storageVolumeClazz.getMethod("isRemovable");
        Object result = getVolumeList.invoke(mStorageManager);
        final int length = Array.getLength(result);
        for (int i = 0; i < length; i++) {
            Object storageVolumeElement = Array.get(result, i);
            String path = (String) getPath.invoke(storageVolumeElement);
            boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);
            if (removable) {
                return path;
            }
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
    return null;
}

測試路徑內存

Log.e("TAG", "外置SD卡路徑 = " + getExtendedMemoryPath(this));
Log.e("TAG", "內置SD卡路徑 = " + Environment.getExternalStorageDirectory().getAbsolutePath());
Log.e("TAG", "手機內存根目錄路徑  = " + Environment.getDataDirectory().getParentFile().getAbsolutePath());

 

相關文章
相關標籤/搜索