Android中的檔案讀寫操作

2021-10-11 19:12:26 字數 4246 閱讀 9255

在android開發中檔案操作使用的其實還是比較高頻的,之前我遇到這種需求都隨便寫寫,對此沒有乙個比較全面的認識,所以想借這篇文章來梳理一遍。

由於需要讀寫檔案,這包含了讀寫外部sd card的檔案,所以需要新增對飲的讀寫許可權

1、獲取儲存路徑android可能有兩個地方可以儲存檔案,一是存放在sd卡中(如果有的話),另外就是儲存在記憶體卡中,那麼與此對應的就有兩組方法來獲取儲存路徑。

a、獲取sd卡相關路徑的方法

關於獲取sd卡相關路徑方法和獲取到的路徑的對應關係如下

environment.getexternalstoragedirectory().getabsolutepath()

/storage/emulated/0

environment.getexternalstoragepublicdirectory(environment.directory_dcim).getabsolutepath())

/storage/emulated/0/dcim

這兩個方法是通過environment提供的方法來獲取sd卡路徑,可以看到的獲取的基本是sd卡的根路徑,而實際上/storage/emulated/0這個路徑代表是的第一行sd卡,當我們在該路徑下建立yoryky.txt檔案時,實際手機上看到的路徑是/儲存盤/yoryky.txt,根本是找不到/storage/emulated/0這個路徑的。

另外我們還可以根據context物件提供的方法來獲取sd卡的儲存路徑

getexternalcachedir().getabsolutepath()

/storage/emulated/0/android/data/packagename/cache

getexternalfilesdir(environment.directory_pictures).getabsolutepath:

/storage/emulated/0/android/data/packagename/files/pictures

這個路徑是在上面講到cache目錄的同級目錄下建立乙個files目錄,並在其中闖將存放的pictures目錄。getexternalfilesdir方法中可以傳多種引數,例如還可以傳environment.directory_dcim這個引數一遍在files目錄下建立dcim這個目錄。

由此我們知道獲取sd卡路徑的方法有兩套,一套是通過environment類獲取packagename無關的路徑,一套是通過context類獲取packagename相關的路徑,packagename路徑下可以有cache和files兩個目錄。

這裡的cache以及files兩個目錄在手機中的路徑為/儲存盤/sd/android/data/packagename/中。

b、獲取記憶體卡相關路徑方法

和獲取sd卡路徑不同,獲取記憶體卡路徑不能通過environment類來獲取,只能通過context來獲取

getcachedir().getabsolutepath()

/data/user/0/packagename/cache

getfilesdir().getabsolutepath()

/data/user/0/com.yoryky.demo/files

可以看出context提供的兩個方法,乙個用來獲取cache目錄路徑,乙個用來獲取files目錄路徑。這個的/data/user/0/代表多使用者(android 4.2版本開始支援多使用者)中的第乙個使用者的儲存路徑,這個在手機上也是找不到的,實際上cache和files在手機中的路徑如下

看的出來,手機上cache和files的實際路徑為/儲存盤/android/data/packagename/。

2、讀寫sd card路徑中檔案

第一小節講了獲取sd卡目錄路徑以及記憶體卡目錄路徑的方法,這裡先來說說讀寫sd卡路徑中檔案的方法實現

a、寫sd卡中的檔案方法

這裡通過fileoutputstream類來實現寫sd卡檔案

/**

* 將內容寫入sd卡中

* @param filename 要寫入的檔名

* @param content 待寫入的內容

* @throws ioexception

*/public static void writeexternal(context context, string filename, string content) throws ioexception

}

這個**很簡單,而且注釋也很詳細,這裡就不解釋了。

b、讀sd卡中的檔案方法

通過fileinputstream來獲取sd卡中對應檔案的內容

/**

* 從sd card檔案中讀取資料

* @param filename 待讀取的sd card

* @return

* @throws ioexception

*/public static string readexternal(context context, string filename) throws ioexception

//關閉輸入流

inputstream.close();

}return sb.tostring();

}

通過fileinputstream物件遍歷便可以獲取對應檔案中的內容。

3、讀寫記憶體卡中的檔案

其實續寫記憶體卡中的檔案方法和讀寫sd卡檔案方法基本一致,就是檔案路徑改變了而已。

a、寫記憶體卡中檔案方法

這裡也直接給出實現

/**

* 寫internal card檔案

* @param context

* @param filename

* @param content

* @throws ioexception

*/public static void writeinternal(context context, string filename, string content) throws ioexception

這裡還是通過fileoutputstream類來寫資料到檔案中。

b、讀記憶體卡中檔案方法

還是直接給**

/**

* 讀記憶體卡中檔案方法

* @param context

* @param filename 檔名

* @return

* @throws ioexception

*/public static string readinternal(context context,string filename) throws ioexception

//關閉輸入流

inputstream.close();

return sb.tostring();

}

這裡依然通過fileinputstream來獲取檔案中的資料。

到這裡讀寫sd卡以及記憶體卡中的檔案方法就算是寫完了,實際上有這四個方法,我麼就可以封裝乙個自己的fileutil類來專門處理檔案的讀寫操作了。這裡還是給乙個demo位址吧,android demo.

4、參考文獻

1、android常見檔案路徑介紹

2、android讀寫檔案

3、android sd卡簡單的檔案讀寫操作

4、android 檔案的讀取和寫入

這幾個參考文獻可好好看看,特別是前兩篇,第一篇說清楚了sd卡和記憶體卡路徑的作用和獲取方式,而第二篇說清了android中其它檔案的獲取方式寶座資源檔案以及assets中的檔案獲取方式。

android 檔案讀寫操作

android檔案操作 test in main string filename data data com.example.fileoperation files test.txt string str this is for test string readfiledata filename w...

Android中檔案的讀寫操作

一 讀取assets目錄下的檔案 try catch ioexception e 二 讀取raw目錄下的檔案 try catch ioexception e 三 讀取手機儲存檔案 內建 try catch filenotfoundexception e catch unsupportedencodi...

Android中檔案的讀寫操作

一 讀取assets目錄下的檔案 try catch ioexception e 二 讀取raw目錄下的檔案 try catch ioexception e 三 讀取手機儲存檔案 內建 try catch filenotfoundexception e catch unsupportedencodi...