Android資料存放區(三)File 資料外部儲存

來源:互聯網
上載者:User

三  File 資料外部儲存

每一個android裝置支援一個共用“外部儲存”,您可以使用它來儲存檔案。這可能是一個移動儲存媒體(如一個SD卡)或一個內部(固定的)儲存。檔案儲存到外部儲存是公開的,可由使用者修改他們。

注意:外部存放裝置上的檔案,所有的應用程式都可以訪問它,甚至可以串連在電腦上直接修改。

1、檢查外部存放裝置是否可用

在你使用外部存放裝置的時候,你應該總是先調用Environment.getExternalStorageState()的方法來檢查外部存放裝置的可用性。比如:


boolean mExternalStorageAvailable = false;boolean mExternalStorageWriteable = false;String state = Environment.getExternalStorageState();if (Environment.MEDIA_MOUNTED.equals(state)) {//已經插入了sd卡,並且可以讀寫    mExternalStorageAvailable = mExternalStorageWriteable = true;} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {//已經插入了sd卡,但是是唯讀情況    mExternalStorageAvailable = true;    mExternalStorageWriteable = false;} else {    //其他錯誤的狀態。外部存放裝置可能在其他的裝備,但是我們要知道,在這一種情況下,我們不能對其進行讀寫。     mExternalStorageAvailable = mExternalStorageWriteable = false;}

這個例子只檢查了外部存放裝置是否可讀寫,它還有很多其他的狀態,比如與電腦串連、沒有裝置、或者嚴重移除等等。


2、訪問外部儲存空間的檔案

如果使用API層級8或更高的版本,可以使用getExternalFilesDir()方法來開啟一個File對象,它代表了應該儲存檔案的外部儲存空間目錄。type表示你想要訪問什麼樣的子目錄,比如Environment.DIRECTORY_MUSIC,如果訪問根目錄,就傳入null。如果需要,這個方法會建立合適的目錄。通過指定目錄的類型,確保Android的介質掃描器把檔案正確的分類到系統中(例如,鈴聲被標識為鈴聲,而不是音樂)。如果使用者卸載了應用程式,應用對應的目錄和目錄中所有的內容將會被刪除。

如果使用API層級7或更低的版本,使用getExternalStorageDirectory()方法來開啟一個File對象,它代表了外部儲存空間的根目錄,然後應該把資料寫到下列目錄中:

/Android/data/<package_name>/files/

<package_name>是Java樣式的包名,如:com.example.android.app。如果使用者的裝置正在運行API層級8或更高的版本,並且卸載了應用程式,那麼這個目錄和其所有的內容將會被刪除。

例子:

File file = new File(Environment.getExternalStorageDirectory() +filePathName);
這種方式得到的檔案根路徑 為mnt / sdcard


File file=getExternalFilesDir(null);
這種方式得到的檔案跟路徑為  /mnt/sdcard/Android/data/包名/files

既然得到了sdcard的路徑,那麼就可以用io流來操作檔案儲存體資料了。

不過採用第二種方式得到路徑時,一定要添加下面的許可權。並且,對檔案操作時,也要添加下面的許可權。

注意,還要加許可權
<!-- 在SD卡中建立與刪除檔案許可權 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 向SD卡寫入資料許可權 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

3、對媒體瀏覽器隱藏你的檔案

在檔案名稱字前面加     比如  .圖片1     .圖片2  等等



4、儲存應該共用的檔案

如果儲存的檔案不是應用程式所專有的,並且在應用程式被卸載時,不刪除這些檔案,那麼就要把它們儲存到外部儲存空間上的一個公用的目錄上。這些目錄位於外部儲存空間的根目錄,如Music/、Pictures/、Ringtones/等等。

在API層級8或更高的版本中,使用getExternalStoragePublicDirectory()方法,把需要的公用目錄類型傳遞給這個方法,如DIRECTORY_MUSIC、DIRECTORY_PICTURES、DIRECTORY_RINGTONES或其他的類型。如果需要,這個方法會建立適當的目錄。

如果使用API層級7或更低的版本,使用getExternalStorageDirectory()方法來開啟一個File對象,它代表了外部儲存空間的根,然後把共用檔案儲存到下列目錄之一中:

Music/---媒體掃描器把在這個目錄中找到所有媒體檔案作為使用者音樂。

Podcasts/---媒體掃描器把在這個目錄中找到的所有媒體檔案作為音/視頻的剪輯片段。

Ringtones/---媒體掃描器把在這個目錄中找到的所有媒體檔案作為鈴聲。

Alarms/---媒體掃描器把在這個目錄中找到的所有媒體檔案作為鬧鐘的聲音。

Pictures/---所有的圖片(不包括那些用照相機拍攝的照片)。

Movies/---所有的電影(不包括那些用攝像機拍攝的視頻)。

Download/---其他下載的內容。

5、儲存快取檔案

如果使用API層級8或更高的版本,使用getExternalCacheDir()來開啟一個File對象,它代表了儲存快取檔案的外部儲存空間目錄。如果卸載應用程式,這些檔案會自動的被刪除。但是,在應用的生存期間,應該自己管理這些快取檔案,並且為了保留儲存空間,應在不需要的時候刪除這些快取檔案。

如果使用API層級7或更低的版本,就要使用getExternalStorageDirectory()方法來開啟一個File對象,它代表了外部儲存空間的根目錄,然後把快取資料寫入下列目錄中:

/Android/data/<package_name>/cache/

<package_name>是Java樣式的包名,如:com.example.android.app。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.