今天項目一個問題涉及了手機文件存儲,特此記錄一下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());