Android資料儲存與IO(摘自瘋狂Android講義)
前言碎語:今天是第一次在簡書上寫東西,以前總是說要記筆記,但是簡書上又有很多東西了,一查就能找得到。但是別人寫的畢竟是別人的,自己寫的才是自己的,雖然我這個是從書本摘抄的,但也是我的一份辛勤勞動啊,記的是我在學習的時候,對理解有幫助的東西。這也是我第一次使用MarkDown語法編輯東西,介面可能會有點醜,如果有看官看到,就不要吐槽了,因為我真的是個菜鳥。
1.使用SharedPreferences
1.1 SharedPreferences與Editor簡介
SharedPerferences儲存的資料主要是簡單型別的key-value對。
SharedPreferences介面主要負責讀取應用程式的Preferences資料。它提供瞭如下方法訪問SharedPreferences中的key-value對。
- boolean contains(String key):判斷SharedPreferences是否包含指定key對應的value。
- abstract Map<String, ?> getAll():獲取SharedPreferences資料裡全部的key-value對。
- boolean getXxx(String key, xxx defValue):獲取SharedPreferences資料裡指定key對應的value。如果該key不存在,則返回預設值defValue。
SharedPreferences介面本身並沒有提供寫入資料的能力,而是通過SharedPreferences的內部介面,SharedPreferences呼叫edit()方法即可獲取它所對應的Editor物件。Editor提供瞭如下方法來向SharedPreferences寫入資料。
- SharedPreferences.Editor clear():清空SharedPreferences裡的所有資料。
SharedPreferences.Editor putXxx(String key,xxx value):向SharedPreferences存入指定key對應的資料。
SharedPreferences.Editor remove(String key):刪除SharedPreferences裡指定key對應的資料項。
-
boolean commit():當Editor編輯完成後,呼叫該方法提交修改。
總結一下:SharedPreferences負責根據key讀取資料,而SharedPreferences.Editor則用於寫入資料。
SharedPreferences本身是一個介面,程式無法直接建立SharedPreferences例項,只能通過Context提供的getSharedPreferences(String name,int mode)方法來獲取SharedPreferences例項。
其中mode有3個值可供選擇,但是從Android4.2開始推薦使用Context.MODE_PRIVATE,表示該SharedPreferences資料只能被本應用程式讀寫。
1.2 SharedPreferences的儲存位置和格式
下面舉個例子,示範如何向SharedPreferences中寫入、讀取資料。程式介面很簡單,只是提供兩個按鈕,一個用於寫入資料,一個用於讀取資料。
public class MainActivity extends Activity
{
SharedPreferences preferences;
SharedPreferences.Editor editor;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 獲取只能被本應用程式讀、寫的SharedPreferences物件
preferences = getSharedPreferences("crazyit", MODE_PRIVATE);
editor = preferences.edit();
Button read = (Button) findViewById(R.id.read);
Button write = (Button) findViewById(R.id.write);
read.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
// 讀取字串資料
String time = preferences.getString("time", null);
// 讀取int型別的資料
int randNum = preferences.getInt("random", 0);
String result = time == null ? "您暫時還未寫入資料" : "寫入時間為:"
+ time + "\n上次生成的隨機數為:" + randNum;
// 使用Toast提示資訊
Toast.makeText(MainActivity.this, result
, Toast.LENGTH_SHORT).show();
}
});
write.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 "
+ "hh:mm:ss");
// 存入當前時間
editor.putString("time", sdf.format(new Date()));
// 存入一個隨機數
editor.putInt("random", (int) (Math.random() * 100));
// 提交所有存入的資料
editor.commit();
}
});
}
}
SharedPreferences中的資料總是儲存在/data/data/<package-name>/shared_prefs目錄下,SharedPreferences資料總是以XML格式儲存。
單擊“寫入資料”後,在點選“讀取資料”按鈕,結果如下圖所示:
1.2 File儲存
1.2.1 openFileInput和openFileOutput
Context提供瞭如下兩個方法來開啟應用程式的資料資料夾裡的檔案IO流。
- FileInputStream openFileInput(String name):開啟應用程式的資料資料夾下的name檔案對應的輸入流。
- FileOutputStream openFileOutput(String name,int mode):開啟應用程式的資料資料夾下的name檔案對應的輸出流。
其中第二個方法的第二個引數指定開啟檔案的模式,該模式支援如下值:
- MODE_PRIVATE:該檔案只能被當前程式讀寫
- MODE_APPEND:以追加的方式開啟該檔案,應用程式可以向檔案中追加內容
- 還有兩種從Android4.2開始就不推薦使用了,此處就不列舉出來了
除此之外,Context還提供瞭如下幾個方法來訪問應用程式的資料資料夾。
- getDir(String name,int mode):在應用程式的資料資料夾下獲取或建立name對應的子目錄。
- File getFilesDir():獲取應用程式的資料資料夾下的絕對路徑。
- Strin[] fileList():返回應用程式的資料資料夾下的所有檔案。
- deleteFile(String):刪除應用程式的資料資料夾下的指定檔案。
下面貼出寫入與讀取的模板:
其中new StringBuilder(buff,0,hasRead)是用它的構造方法將位元組陣列轉換為字串,hasRead表示已讀取的位元組數。
小結一下:向檔案中輸入用到輸出流,從檔案中讀取用到輸入流
1.2.2 讀寫SD卡上的檔案
讀寫SD卡上的檔案按如下步驟:
1.呼叫Environment的getExternalStorageState()方法判斷手機上是否插了SD卡,並且應用程式具有讀寫SD卡的許可權。例如下面程式碼:如果手機已插入SD卡並且應用程式具有讀寫SD卡的能力,下面語句返回true。
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
2.呼叫Environment的getExternalStorageDirectory()方法來獲取外部儲存器,也就是SD卡的目錄。
3.使用FileInputStream、FileOutputStream、FileReader或FileWriter讀寫SD卡里的檔案。
注意事項:讀寫SD卡上的資料,必須在AndroidManifest.xml中新增讀寫SD卡的許可權。
例如下面的配置:
<!-- 在SD卡中建立與刪除檔案許可權 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">
<!-- 向SD卡寫入資料許可權 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
下面貼出寫入與讀取SD卡上的檔案模板:
1.3 SQLite資料庫
Android系統整合了一個輕量級的資料庫:SQLite
1.3.1 SQLiteDatabase簡介
Android提供了SQLiteDatabase代表一個資料庫,一旦應用程式獲得了代表資料庫的SQLiteDatabase物件,接下來就可通過SQLiteDatabase物件來管理、運算元據庫了。
由於最近學習了LitePal資料庫框架,我在想有沒有必要介紹SQLiteDatabase了。
這沒有斷更~~~
相關文章
- 瘋狂android講義目錄Android
- 瘋狂Android講義(第3版) 李剛著PDF版Android
- 瘋狂Android講義(第二版)pdf及原始碼、工具下載Android原始碼
- 瘋狂Java講義第3版PDFJava
- 瘋狂Java講義_Chapter03資料型別和運算子JavaAPT資料型別
- OC語言瘋狂講義學習筆記C語言筆記
- Android 資料儲存知識梳理(2) Android儲存目錄Android
- Android中的資料儲存Android
- 33.Android資料儲存Android
- Android基礎與應用 資料儲存與訪問Android
- Android中的資料儲存之檔案儲存Android
- Android瘋狂的專利戰爭史記Android
- 【Android】資料儲存(三) 資料庫(SQLite)Android資料庫SQLite
- Android技能樹 — Android儲存路徑及IO操作小結Android
- 瘋狂Java講義_07_正規表示式RegExJava
- Android資料儲存之SharedPreferences及如何安全儲存Android
- Android資料儲存之SQLCipher資料庫加密AndroidSQL資料庫加密
- [瘋狂JAVA講義].李剛.高清掃描版.part20.rar[瘋狂JAVA講義].李剛.高清掃描版.part20.rar...Java
- 詳解Android資料儲存技術Android
- 37.Android資料儲存再整理Android
- 《瘋狂Kotlin講義》讀書筆記4——流程控制Kotlin筆記
- Android的3種資料儲存技術(一)File儲存Android
- 第四講 資料儲存
- Android儲存Android
- Android視訊學習(一):資料儲存與介面展示1Android
- Android中的資料儲存之SharedPreferencesAndroid
- Android資料儲存之GreenDao 3.0 詳解Android
- Android資料儲存之Android 6.0執行時許可權下檔案儲存的思考Android
- Android逆向之旅--瘋狂兔子無敵跑跑 內購破解教程Android
- 瘋狂iOS 講義(上) Objective-C 2.0與iPhone/iPad應用開發基礎iOSObjectiPhoneiPad
- [瘋狂JAVA講義].李剛.高清掃描版.part16.rarJava
- [瘋狂JAVA講義].李剛.高清掃描版.part17.rarJava
- [瘋狂JAVA講義].李剛.高清掃描版.part18.rarJava
- Android 程式設計日誌之資料儲存Android程式設計
- Android SharedPreferences儲存資料使用例項分析Android
- Android資料儲存之Content Providers薦AndroidIDE
- Android之SharedPreference輕量級資料儲存Android
- Android 外部儲存Android