Android 儲存學習之在內部儲存中讀寫檔案
大家都知道,在實際工作中開發,進場需要將一個檔案寫入到手機的儲存中。既然說到手機的儲存空間,那就先說說手機的儲存空間分類:
1: 內部儲存空間
RAM記憶體: 也就是手機的啟動並執行記憶體,相當於電腦的記憶體
ROM記憶體: 也就是手機的儲存記憶體,相當於電腦的硬碟
2: 外部儲存空間
也就是可插拔的SD卡,相當於電腦的移動硬碟,隨身碟等。
既然手機儲存分為兩類,那我們先看看如何在手機的內部儲存中讀寫檔案。
那我們引入一個實際中很常見的例子:
一般帶登入介面的,都需要將使用者的資訊儲存到本地。我們就用上面的例子示範,將使用者輸入的資訊儲存到手機的內部儲存。
布局檔案代碼如下:
當我們點擊按下確定按鈕後,會將我們的使用者資訊,寫到手機的內部儲存中,也就是該應用所在的包名下
public void login(View v) { String name = ed_nam.getText().toString(); String passwd = ed_passwd.getText().toString(); //判斷使用者名稱或者密碼是否輸入 if((name.equals()) || (passwd.equals())) { Toast.makeText(this, 使用者名稱或密碼不可為空, Toast.LENGTH_SHORT).show(); } else { //如果選中自動登入,我們就需要儲存使用者名稱和密碼 if(cb.isChecked()) { //建立一個檔案,使用者儲存使用者名稱和密碼 File file = new File(data/data/com.demo.storage/info.txt); try { FileOutputStream fos = new FileOutputStream(file);//寫入使用者名稱和密碼,以name##passwd的格式寫入fos.write((name + ## + passwd).getBytes());//關閉輸出資料流fos.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} } Toast.makeText(this, 登入成功, Toast.LENGTH_SHORT).show();} }
我所指定的檔案儲存體路徑就是包名下的info.txt檔案:
我們匯出可以看下:
到這裡的話,我們的往手機的內部儲存中寫已經完成。接下是往手機的內部儲存中讀。
那我們就這樣做,當如果只要點擊進入此Actiivty就顯示出用於以前儲存的用於和密碼
public void readInfo(){File file = new File(data/data/com.demo.storage/info.txt);//如果檔案存在,則讀取if(file.exists()){try {FileInputStream fin = new FileInputStream(file);//把位元組流轉化為字元流BufferedReader buffer = new BufferedReader(new InputStreamReader(fin));//讀取檔案中的使用者名稱和密碼String text = buffer.readLine();//以##為關鍵字分割字元String s[] = text.split(##);//設定進EditTexted_nam.setText(s[0]);ed_passwd.setText(s[1]);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
當我們只要進入就會回顯出,我能輸入的使用者名稱和密碼:
到這裡我們的讀寫就完成了。
但是有人有沒有發現我們上面的路徑都是我們自己寫死的,同時也是自己用手一個一個寫的,萬一中間寫錯一個字母,豈不是很麻煩。
不過Google給我們提供了一個專門訪問內部儲存的API:getFilesDir()
//建立一個檔案,使用者儲存使用者名稱和密碼 //File file = new File(data/data/com.demo.storage/info.txt); //getFilesDir返回的是一個File對象,其路徑是:data/data/com.demo.storage/files File file = new File(getFilesDir(), info.txt);
getFileDir的路徑是包名下files檔案下:當我們點擊登入時,就會在此路徑下建立一個info.txt檔案
同理Google也提供了一個API: getCacheDir(),其路徑大家可以猜到了,就是cache所在的路徑了。
我們進入到系統設定,app,正在運行中就找到此進程
就能看到如所示,其中Clear Data按鈕是清除包名檔案夾下所有的內容,Clear Cache是清除Cache檔案夾下的內容