1. 程式人生 > >android檔案路徑詳解

android檔案路徑詳解

做資料儲存的時候碰到過檔案路徑的問題,下面就這個問題做一個 總結:

如果我們想按照下面的方式建立檔案:

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被刪除後該檔案不會一起被刪除,會保留下來,我們不能評判這種情況的好壞,因為不同場合的利弊不一樣。

為了解決這種情況,我們用下面的方法:

File file=MainActivity.this.getExternalFilesDir(null);
MainActivity為對應的類,需要自己替換。

此時傳入的引數為空,若不為空,則會根據你傳的引數對應的建立一個檔案。當然同樣會在你的app解除安裝時一起刪除。

當然,我們可以用類似的方法

MainActivity.this.getExternalCacheDir();
只不過一個建立的資料夾是files,一個是cache。說法是一個是檔案,一個放快取,具體區別自己去體會。

上面的兩種儲存能直接通過你的檔案管理工具檢視到(不管你的手機有沒有root)。這也帶來另外一個問題:該檔案是共享的,同樣,我們也不能評判其好壞。

為了使我們的檔案只能供我們自己的app使用,我們可以用下面的這種方法:

File file=MainActivity.this.getFilesDir();
在我的小米手機上獲取的路徑為:/data/data/程式包名/files,

當然我們能夠在該檔案目錄下建立檔案或者資料夾。

同樣有一個類似的 方法:

MainActivity.this.getCacheDir()
建立的是一個快取檔案。

上面兩種方法建立的檔案如果你的手機沒有root許可權,你是看不到的。

講解的詳細程式碼已經上傳: