Android 內部儲存與外部儲存

2021-08-01 16:20:34 字數 2972 閱讀 6372

...>

"android.permission.write_external_storage" />

...

注意:目前所有應用都可以讀取外部儲存,而無需特別的許可權。但這在將來版本中會進行更改。如果應用需要讀取外部儲存(但不向其寫入資訊),那麼您將需要宣告 read_external_storage許可權。

...>

"android.permission.read_external_storage" />

...

但是,如果應用使用 write_external_storage 許可權,那麼它也隱含讀取外部儲存的許可權。您也無需任何許可權,即可在內部儲存中儲存檔案,您的應用始終具有在其內部儲存目錄中進行讀寫的許可權。

將檔案儲存在內部儲存中

在內部儲存中儲存檔案時,您可以通過呼叫以下兩種方法之一獲取作為file的相應目錄:

getfilesdir(): 應用的內部儲存目錄

getcachedir(): 應用的內部快取目錄

如:

file

file = new

file(context.getfilesdir(), filename);

寫入到檔案: 可以呼叫openfilleoutput()獲取到寫入內部目錄中的檔案的fileoutputstream,例如下面顯示向檔案寫入文字:

string filename="myfile";

string string="hello world!";

fileoutputstream outputstream;

trycatch(exceptoin e)

快取某些檔案: 使用createtempfile(),快取某些檔案,例如以下方法從url提取檔名並在您的應用的內部快取目錄中以該名稱建立檔案:

public file gettempfile(context context,string url)

catch(ioexception e)

{}return file;

}

備註: 您的應用的內部儲存裝置目錄由您的應用在android檔案系統特定位置中的軟體包名稱指定。從技術上講,如果您將檔案模式設定為可讀,那麼另乙個應用也可以讀取您的內部檔案。當然,此應用也需要知道您的應用的軟體包名稱和檔名。如果將內部儲存檔案使用mode_private,其它應用便從不會訪問它們。

將檔案儲存在外部儲存中

說明: 由於外部儲存可能不可用,比如,當使用者已將儲存裝載到電腦或已移除提供外部儲存的sd卡時,因此,在訪問它之前,應始終確認其容量。可以通過呼叫getexternalstoragestate()查詢外部儲存狀態。如果返回的狀態為media_mounted,那麼您可以對您的檔案進行讀寫。以下方法對於確定儲存可用性非常有用:

//檢查外部儲存是否可用

public

boolean

i***ternalstoragewritable()

return

false;

}//檢查外部儲存是否至少是可讀的

public

boolean

i***ternalstoragereadable()

return

false;

}

請使用getexternalstoragepublicdirecotry()方法獲取表示外部儲存裝置上相應目錄的file*。該方法的使用需要指定檔案型別引數,比如directory_music或directory_pictures***。

public file getalbumstoragedir(string albumname)

return file;

}

外部儲存儲存應用專用檔案

在外部儲存上儲存應用專用檔案,可以通過呼叫getexternalfilesdir()並向其傳遞目錄檔案型別的名稱。通過這種方法建立的各個目錄將新增到封裝應用的所有外部儲存檔案的父目錄,當使用者解除安裝您的應用時,系統會刪除這些檔案。例如用以下方法建立個人相簿的目錄:

return

file;

}

說明: 如果沒有適合您檔案的預定義子目錄名稱,可以呼叫getexternalfilesdir()的時候傳遞null.這將返回外部儲存上您的應用的專用目錄的根目錄。如果要讓應用解除安裝後儲存在這個目錄的檔案仍然可用,此時應該改用getexternalstoragepublicdirectory()。

外部儲存總結:無論您對於共享的檔案使用getexternalstoragepublicdirectory()還是應用的專用檔案getexternalfilesdir(),使用諸如directory_pictures的api常數提供的目錄名稱非常重要。這些目錄名稱可確保系統正確處理檔案。例如儲存在directory_ringtongs中的檔案由系統**掃瞄程式歸類為鈴聲,這樣方便使用者的檔案管理和檢視

查詢可用空間

getfreespace()方法提供目前的可用空間,gettotalspace()方法獲取儲存卷中的空餘空間。

小竅門: 儲存檔案之前,可無需檢查可用空間量。可以嘗試立刻寫入檔案,然後在ioexception出現時將其捕獲,如果不知道所需的確切空間量,可以這樣做。

刪除檔案

開發者應始終刪除不再需要的檔案,呼叫方法如

myfile.delete();
如果檔案儲存在內部儲存中,還可以請求context呼叫deletefile來定位和刪除檔案

mycontext.deletefile(filename);

注意: 當使用者解除安裝您的應用時,android系統會刪除以下各項:

Android 外部儲存,內部儲存路徑

import android.content.context import android.os.environment import android.util.log public class directoryutils 獲取當前程式路徑 應用在記憶體上的目錄 data data com.exa...

Android內部儲存和外部儲存

一 內部儲存空間中的應用私有目錄 對於沒有 root 過的手機,普通使用者是無法檢視 data data 目錄內容的。不過開發人員可以使用模擬器除錯應用,並通過 ddms dalvik debug monitor server 提供的 file explorer 工具檢視模擬器裝置的儲存空間 get...

android的內部與外部儲存目錄

安卓系統提供了不同於pc的訪問檔案系統根路徑的api,同時對乙個應用的私有檔案做了統一的管理。外部儲存external storage和內部儲存internalstorage 1.內部儲存 getfilesdir 2.外部儲存 外儲存根目錄 environment.getexternalstorag...