android檔案路徑詳解
阿新 • • 發佈:2019-02-03
做資料儲存的時候碰到過檔案路徑的問題,下面就這個問題做一個 總結:
如果我們想按照下面的方式建立檔案:
File file=new File("/data/abcdef.txt");
你會發現建立不成功,即使你加上許可權,也會提示你錯誤:java.io.IOException: Permission denied
很顯然,我們沒法在該路徑下來建立檔案。
同樣我們在不同的手機系統中,儲存卡的命名方式也是不同的。
那麼我們應該怎麼做呢?
現在的智慧手機通常不需要安裝記憶體卡,但是同樣我們能夠運用類似的方法來獲取其路徑。例如下面的程式碼:File file = Environment.getExternalStorageDirectory();
在我的聯想手機(android4.4)中,我得到的目錄是:/storage/sdcard0;在我的小米手機(android5.0)中,我得到的目錄是:/storage/emulated/0;在我的genymotion模擬器(android7.0)中,我得到的目錄是:/storage/emulated/0。所以不同的手機或者手機系統的內部儲存卡的路徑是不同的。這也印證了上面的話。
這就是在儲存卡中儲存檔案的方法。當然這種方法有一個特點:就是在你的app被刪除後該檔案不會一起被刪除,會保留下來,我們不能評判這種情況的好壞,因為不同場合的利弊不一樣。
為了解決這種情況,我們用下面的方法:
MainActivity為對應的類,需要自己替換。File file=MainActivity.this.getExternalFilesDir(null);
此時傳入的引數為空,若不為空,則會根據你傳的引數對應的建立一個檔案。當然同樣會在你的app解除安裝時一起刪除。
當然,我們可以用類似的方法
MainActivity.this.getExternalCacheDir();
只不過一個建立的資料夾是files,一個是cache。說法是一個是檔案,一個放快取,具體區別自己去體會。上面的兩種儲存能直接通過你的檔案管理工具檢視到(不管你的手機有沒有root)。這也帶來另外一個問題:該檔案是共享的,同樣,我們也不能評判其好壞。
為了使我們的檔案只能供我們自己的app使用,我們可以用下面的這種方法:
在我的小米手機上獲取的路徑為:/data/data/程式包名/files,File file=MainActivity.this.getFilesDir();
當然我們能夠在該檔案目錄下建立檔案或者資料夾。
同樣有一個類似的 方法:
MainActivity.this.getCacheDir()
建立的是一個快取檔案。
上面兩種方法建立的檔案如果你的手機沒有root許可權,你是看不到的。
講解的詳細程式碼已經上傳: