最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Android開發(fā)學(xué)習(xí)教程(30)- Android數(shù)據(jù)存儲(chǔ)的幾種方式

2023-01-30 01:10 作者:ChatGPT云炬學(xué)長(zhǎng)  | 我要投稿

—— 十七歲全力以赴,十八歲好好慶祝,F(xiàn)ighting!

Android存儲(chǔ)android四大組件之一,所以它的數(shù)據(jù)存儲(chǔ)方式在介紹四大組件的時(shí)候說明。

1、文件存儲(chǔ)

文件存儲(chǔ)不對(duì)存儲(chǔ)的內(nèi)容進(jìn)行任何的格式化處理,所有數(shù)據(jù)都是原封不動(dòng)地保存到文件當(dāng)中的,因而它比較適合用于存儲(chǔ)一些簡(jiǎn)單的文本數(shù)據(jù)或二進(jìn)制數(shù)據(jù)。文件存儲(chǔ)有兩種方式,一是存儲(chǔ)到手機(jī)內(nèi)存中(memory),一是存儲(chǔ)到sd卡中。

1.1 存儲(chǔ)到手機(jī)內(nèi)存中

Context類中提供了一個(gè) openFileOutput()方法,可以用于將數(shù)據(jù)存儲(chǔ)到指定的文件中:

1
2
3
4
??openFileOutput(name, mode):
??name:是文件名,注意這里指定的文件名不可以包含路徑,因?yàn)樗械奈募际悄J(rèn)存儲(chǔ)到/data/data/<package?name="">/files/(等價(jià)于 getFilesDir())目 錄下 的
??mode:是文件的操作模式 ,MODE_PRIVATE:默認(rèn)的操作模式,同名文件內(nèi)容會(huì)被覆蓋。MODE_APPEND則表示 如果該文件已存在就往文件里面追加內(nèi)容,不存在就創(chuàng)建新文件。
</package>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public?void?save(String data) {
????FileOutputStream out =?null;
????BufferedWriter writer =?null;
????try?{
????????out = openFileOutput("content", Context.MODE_PRIVATE);
????????writer =?new?BufferedWriter(new?OutputStreamWriter(out));
????????writer.write(data);
????}?catch?(IOException e) {
????????e.printStackTrace();
????}?finally?{
????????try?{
????????????if?(writer !=?null) {
????????????????writer.close();
????????????}
????????}?catch?(IOException e) {
????????}
????}
}
public?String read() {
????FileInputStream in =?null;
????BufferedReader reader =?null;
????StringBuilder content =?new?StringBuilder();
????try?{
????????in = openFileInput("content");
????????reader =?new?BufferedReader(new?InputStreamReader(in));
????????String line =?"";
????????while?((line = reader.readLine()) !=?null) {
????????????content.append(line);
????????}
????}?catch?(IOException e) {
????????e.printStackTrace();
????}?finally?{
????????if?(reader !=?null) {
????????????try?{
????????????????reader.close();
????????????}?catch?(IOException e) {
????????????????e.printStackTrace();
????????????}
????????}
????}
????return?content.toString();
}

1.2 存儲(chǔ)到手機(jī)SD卡中

前面說的存儲(chǔ)到手機(jī)內(nèi)存,數(shù)據(jù)是存儲(chǔ)在應(yīng)用程序內(nèi)的,文件大小受到限制,而且數(shù)據(jù)隨著程序的卸載而自動(dòng)清除;當(dāng)要存儲(chǔ)大的文件時(shí),或者想數(shù)據(jù)不會(huì)隨著程序的卸載而自動(dòng)清除就可以使用sd卡方式存儲(chǔ)了。使用sd卡存儲(chǔ)主要是使用Environment這個(gè)類的功能。

注:在Android6.0之后讀寫SD卡等危險(xiǎn)的操作需要?jiǎng)討B(tài)申請(qǐng)存儲(chǔ)等權(quán)限。否則可能會(huì)報(bào)異常java.io.FileNotFoundException: /storage/emulated/0/test: open failed: EACCES (Permission denied)

第 1 步:在AndroidManifest清掉中添加所需權(quán)限

1
2
3
????<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">
????<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission></uses-permission>

第 2 步:動(dòng)態(tài)申請(qǐng)權(quán)限

1
2
requestPermissions(new?String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},?101);

第 3 步:使用Environment獲取SD目錄,讀寫數(shù)據(jù):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public?void?save(String data) {
????try?{
????????// 獲取SDcard路徑
????????File sdCardDir = Environment.getExternalStorageDirectory();
????????// SDCard目錄:/mnt/sdcard
????????String sdcardPath = sdCardDir.getAbsolutePath();
????????File file =?new?File(sdCardDir,?"test");
????????RandomAccessFile raf =?new?RandomAccessFile(file,?"rw");
????????// 將文件記錄指針移動(dòng)最后
????????raf.seek(file.length());
????????// 輸出文件內(nèi)容
????????raf.write(data.getBytes());
????????raf.close();
????}?catch?(Exception e) {
????????e.printStackTrace();
????}
}
public?String read() {
????StringBuilder sb =?new?StringBuilder();
????// 獲取SDcard路徑
????try?{
????????File sdCardDir = Environment.getExternalStorageDirectory();
????????File file =?new?File(sdCardDir,?"test");
????????InputStream inputStream =?new?FileInputStream(file);
????????int?len =?0;
????????byte[] buffer =?new?byte[1024];
????????while?((len = inputStream.read(buffer)) != -1) {
????????????sb.append(new?String(buffer,?0, len));
????????}
????????// 關(guān)閉流
????????inputStream.close();
????}?catch?(Exception e) {
????????e.printStackTrace();
????}
????return?sb.toString();
}

2、SharedPreferences存儲(chǔ)

SharedPreferences類,它是一個(gè)輕量級(jí)的存儲(chǔ)類,適合用于保存軟件配置參數(shù)。SharedPreferences是使用鍵值對(duì)的方式來存儲(chǔ)數(shù)據(jù)的,存儲(chǔ)數(shù)據(jù)是以xml文件形式存儲(chǔ),文件存放在/data/data/your package name/shared_prefs目錄下。

1
2
3
4
5
6
7
8
9
10
11
12
public?void?save(String data) {
????SharedPreferences preferences = getSharedPreferences("test", MODE_APPEND);
????SharedPreferences.Editor editor = preferences.edit();
????editor.putString("content", data);
????editor.commit();
}
public?String read() {
????SharedPreferences preferences = getSharedPreferences("test", MODE_PRIVATE);
????return?preferences.getString("content",?"");
}

源碼鏈接:https://yunjunet.cn/876833.html

Android開發(fā)學(xué)習(xí)教程(30)- Android數(shù)據(jù)存儲(chǔ)的幾種方式的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
惠州市| 台中县| 长子县| 汪清县| 万荣县| 宜宾市| 綦江县| 天门市| 合水县| 河津市| 新安县| 九龙坡区| 长汀县| 宁强县| 电白县| 澜沧| 昂仁县| 绥棱县| 革吉县| 东乡县| 宜良县| 平谷区| 郧西县| 曲水县| 津南区| 洞头县| 海盐县| 太和县| 江山市| 天台县| 治县。| 延庆县| 滨州市| 八宿县| 津市市| 新密市| 永德县| 台东市| 浦东新区| 陆川县| 台北县|