android讀取路徑
1. Android:怎麼獲取當前文件(類)所在的目錄的完整路徑
android的硬存儲是按照linux系統規則來劃分的,用於存儲客戶信息和客戶安裝的應用的是/data分區,你如果使用的是c程序的話,應該是在/data/app之類的下面,我手頭沒有板子沒法給你查。文件夾是google約定俗成的,不同廠家應該都是一樣的路徑。如果是廠家定製的應用則是在/system分區下,路徑應該是/system/app下。
如果你是一個android系統學習者,而不是應用開發者的話,我建議看看以下system/etc/initrc對於你會有很大的幫助。
2. 獲取android手機的自帶存儲路徑和sdcard存儲路徑
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的路徑。
3. android 幾種不同路徑的獲取方法
前兩個應用內部存儲通過 Context 來獲取, 第三個作為外部存儲是通過 Environment 類來獲取. 注釋為返回值.
/data/data/包名/
context.getFilesDir(); // /data/data/包名/filescontext.getCacheDir(); // /data/data/包名/cache/sdcard/Android/data/包名/
context.getExternalFilesDir(); // /sdcard/Android/data/包名/filescontext.getExternalCacheDir(); // /sdcard/Android/data/包名/cache/sdcard/xxx
// /storage/emulated/0Environment.getExternalStorageDirectory();// /storage/emulated/0/DCIM, 另外還有MOVIE/MUSIC等很多種標准路徑Environment.(Environment.DIRECTORY_DCIM);
注意, 根據源碼文檔中說明, 獲取外部存儲時, 有可能會因為各種問題導致獲取失敗, 建議先使用 getExternalStorageState 來判斷外部存儲狀態, 如果已掛載的話再存儲.
4. android獲取應用安裝之後的路徑
Log.d(TAG," this.getFilesDir().getParent()"+this.getFilesDir().getParent());
this.getFilesDir().getParent()/data/user/0/com.xxx.xxx
com.xxx.xxx為該應用的包名
以後就不用另行去判斷是真機還是模擬器的安裝之後文件的路徑了
該方法直接返回安裝之後包所在的路徑
手機無法直接查看應用安裝之後 應用寶所在的具體路徑的 可以root之後 或者開發工具Android Studio點擊Device File Explorer等方法查看
5. android 幾個路徑的獲取
String appPath = getApplicationContext().getPackageResourcePath();
/data/app/com.younghare.lepusService-2/base.apk
getApplicationContext().getFilesDir()
getApplicationContext().getFilesDir().getParent()
其實就是/data/data/包(這是沙盒其他app無法訪問)
String dataAppPath = getApplicationContext().getFilesDir().getParent();
new File(dataAppPath+"/databases/task.db").exists();//返回是true
抽象路徑名的絕對路徑名字元串
String appAbsolute = getApplicationContext().getFilesDir().getAbsolutePath()
/data/user/0/com.younghare.lepusService/files
獲取CachDir
getApplicationContext().getCacheDir()
通過Context.getExternalCacheDir()方法可以獲取到 SDCard/ android /data/你的應用包名/cache/目錄,一般存放臨時緩存數據
getApplicationContext().getExternalCacheDir()
/storage/emulated/0/Android/data/com.younghare.lepusService/cache
getExternalFilesDir(null)參數傳入的為null,這樣默認訪問的是files文件夾,我們可以指定子文件夾
6. 如何獲取Android系統掛載U盤的路徑
最近項目開發中碰到這樣一個需求:用戶在定製的 Android 設備上插入 U 盤,然後在應用內導入 U 盤里的文件內容。
問題在於如何獲取 U 盤的路徑,網上搜索後大多數都是採用廣播監聽的方式來獲取 U 盤的路徑。但是如果 U 盤在設備開機之前就插著,這樣登錄應用後就獲取不到 U 盤的路徑了,於是乎此種方法作罷。
這時候同事告訴了另外一種方法,就是從文件中讀取路徑。
U 盤在插入系統後,如果系統檢測到 U盤,便會在系統的 proc 目錄的 mounts 文件內產生一條記錄。
可以看到該文件記錄了 U 盤每一次插入的相關信息(看不清楚?好吧,我摘取其中的一條用日誌列印出來如下)。
最後,可能有小夥伴會問「既然是定製的 Android 設備,第一次插入的時候不是知道了 U 盤的路徑了嗎,只要以後寫死這個路徑不就好了嗎」。好吧,其實當時我也是這么想的,但是實際上每次插拔 U 盤,路徑是不斷變化的,而且仔細看上面那張大圖可以發現每條記錄的 U 盤掛載路徑都是不同的,這也是不能寫死路徑的原因。(PS:十分感謝同事「開志哥」在項目中給予的幫助)
7. 怎麼將android 讀取文件路徑進行更改
android
sdk
安裝後默認會在我的文檔里生成一個.android文件夾,這個及時你的默認路徑.android\avd
打開一個。ini的
配置文件
target=android-7
path=(這就是你要修改的路徑)C:\
Documents
and
Settings\
Administrator
\.android\avd\test.avd
8. Android開發中,獲取U盤或SD卡路徑。
@SuppressLint("PrivateApi")
private String getStoragePath(Context context, boolean isUsb){
String path="";
StorageManager mStorageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
Class<?> volumeInfoClazz;
Class<?> diskInfoClaszz;
try {
volumeInfoClazz = Class.forName("android.os.storage.VolumeInfo");
diskInfoClaszz = Class.forName("android.os.storage.DiskInfo");
Method StorageManager_getVolumes=Class.forName("android.os.storage.StorageManager").getMethod("getVolumes");
Method VolumeInfo_GetDisk = volumeInfoClazz.getMethod("getDisk");
Method VolumeInfo_GetPath = volumeInfoClazz.getMethod("getPath");
Method DiskInfo_IsUsb = diskInfoClaszz.getMethod("isUsb");
Method DiskInfo_IsSd = diskInfoClaszz.getMethod("isSd");
List<Object> List_VolumeInfo = (List<Object>) StorageManager_getVolumes.invoke(mStorageManager);
assert List_VolumeInfo != null;
for(int i=0; i<List_VolumeInfo.size(); i++){
Object volumeInfo = List_VolumeInfo.get(i);
Object diskInfo = VolumeInfo_GetDisk.invoke(volumeInfo);
if(diskInfo==null)continue;
boolean sd= (boolean) DiskInfo_IsSd.invoke(diskInfo);
boolean usb= (boolean) DiskInfo_IsUsb.invoke(diskInfo);
File file= (File) VolumeInfo_GetPath.invoke(volumeInfo);
if(isUsb == usb){//usb
assert file != null;
path=file.getAbsolutePath();
}else if(!isUsb == sd){//sd
assert file != null;
path=file.getAbsolutePath();
}
}
} catch (Exception e) {
YYLog.print(TAG, "[——————— ——————— Exception:"+e.getMessage()+"]");
e.printStackTrace();
}
return path;
}
9. android 怎麼獲取手機文件路徑
用 /mnt 獲取全部掛載的存儲路徑。 mnt/sdcard和mnt/sdcard1一個是系統存儲路徑一個是SD卡存儲路徑。
10. Android 常用路徑的獲取
由於歷史原因,Android 歷史上一些路徑並不固定(也和外存設備的變更有關)。
沒法通過固定的路徑訪問一些文件,需要通過不同的介面獲取路徑。
一些常用路徑如下:
訪問該路徑的方法: