溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android內(nèi)部存儲(chǔ)與外部存儲(chǔ)實(shí)例代碼分析

發(fā)布時(shí)間:2023-03-20 13:53:18 來源:億速云 閱讀:105 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Android內(nèi)部存儲(chǔ)與外部存儲(chǔ)實(shí)例代碼分析的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

什么是內(nèi)部存儲(chǔ)和外部存儲(chǔ)

1.內(nèi)部存儲(chǔ)與外部存儲(chǔ)的存儲(chǔ)介質(zhì):

內(nèi)部存儲(chǔ)的介質(zhì):RAM(內(nèi)存) + 內(nèi)部ROM

外部存儲(chǔ)的介質(zhì):外部ROM + SDCard(TS卡等等)。

2.內(nèi)部存儲(chǔ)與外部存儲(chǔ)的存儲(chǔ)特點(diǎn):

一般來說,以/data開頭的是內(nèi)部存儲(chǔ)。且內(nèi)部存儲(chǔ)不需要任何權(quán)限。

例如:

  • /data/data/< applicationId >/shared_prefs

  • /data/data/< applicationId >/databases

  • /data/data/< applicationId >/files // 通過context.getFilesDir() 獲取該目錄

  • /data/data/< applicationId >/cache //通過context.getCacheDir() 獲取該目錄

內(nèi)部存儲(chǔ)需要關(guān)注的文件夾:

app文件夾(未root無法打開):存放著所有app的apk文件夾

data文件夾:內(nèi)部都是app的包名,存儲(chǔ)著應(yīng)用程序相關(guān)的數(shù)據(jù),例如 data/data/包名/(shared_prefs、database、files、cache)

Android SDK提供了幾個(gè)常見的內(nèi)部存儲(chǔ)文件的權(quán)限

  • Context.MODE_PRIVATE :私有方式存儲(chǔ),其他應(yīng)用無法訪問,覆蓋舊的同名文件

  • Context.MODE_APPEND:私有方式存儲(chǔ),若有舊的同名文件,則在該文件上追加數(shù)據(jù)

一般來說,外部存儲(chǔ)會(huì)放在storage文件夾下或者mnt文件夾下。且需要安卓的權(quán)限。

例如:

私有外部存儲(chǔ)

  • /storage/emulated/0/Android/data/< applicationId >/files/Music //Context.getExternalFilesDir() 包含如Music等文件夾

  • /storage/emulated/0/Android/data/< applicationId >/cache //Context.getExternalCacheDir 外部緩存文件

以及共有外部存儲(chǔ)

/storage/emulated/0 Environment.getExternalStorageDirectory()

/storage/emulated/0/Pictures

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)

外部存儲(chǔ)需要注意的文件夾即外部存儲(chǔ)的分類:

storage中有一個(gè)sdcard文件夾,sdcard下面可以分兩類存儲(chǔ):

外部共有存儲(chǔ)(共有目錄):里面常見的有Pictures、Download等文件夾.

外部私有存儲(chǔ)(私有目錄):系統(tǒng)中的數(shù)據(jù)。

Android內(nèi)部存儲(chǔ)與外部存儲(chǔ)實(shí)例代碼分析

內(nèi)部存儲(chǔ)與外部存儲(chǔ)的文件夾:

Android內(nèi)部存儲(chǔ)與外部存儲(chǔ)實(shí)例代碼分析

3.內(nèi)部存儲(chǔ)與外部存儲(chǔ),釋放內(nèi)存方面的總結(jié):

內(nèi)部存儲(chǔ):隨應(yīng)用卸載被刪除。外部存儲(chǔ):

1.公有目錄:存放一些下載的視頻文件等,比如還有movies,fictures,music等公有的一些文件目錄。

2.私有目錄:隨應(yīng)用卸載被刪除。

內(nèi)部存儲(chǔ)與外部存儲(chǔ)的代碼示例

內(nèi)部存儲(chǔ)

				// 存
 				FileOutputStream fos = null;
                try {
                    //第一個(gè)參數(shù):文件名
                    //第二個(gè)參數(shù):表示文件輸出的類型 這里選擇Context.MODE_PRIVATE每次生成相同的文件名,則覆蓋原有的文件
                    fos = openFileOutput('test', Context.MODE_PRIVATE);
                    String nameAndPassword = username + "." + password;
                    byte[] bytes = nameAndPassword.getBytes();
                    fos.write(bytes);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (fos != null) {
                        try {
                            fos.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
				// 取
				FileInputStream fis = null;
                try {
                    fis = openFileInput(fileName);
                    //fis.available() 判斷文件有多少個(gè)字節(jié)
                    byte[] bytes = new byte[fis.available()];
                    while (fis.read(bytes) != -1) {
                        String message = new String(bytes);
                        String[] split = message.split("\\.");
                        tv_message.setText("用戶名:" + split[0] + "\n" + "密碼:" + split[1]);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

外部存儲(chǔ)

// 獲取外部存儲(chǔ)地址的位置并創(chuàng)建文件:
new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
				// 存
				OutputStream outputStream = null;
                try {
                        outputStream = new FileOutputStream(new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), 'test2'));
                        String nameAndPassword = username + "." + password;
                        byte[] bytes = nameAndPassword.getBytes();
                        outputStream.write(bytes);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (outputStream != null) {
                        try {
                            outputStream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
				// 取
				 FileInputStream fis = null;
                try {
                    //第一個(gè)參數(shù):文件目錄 第二個(gè)參數(shù):文件名
                    //getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)對(duì)應(yīng)的路徑為:
                    // /storage/emulated/0/Android/data/com.example.customviewproject/files/Download
                    File file = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), fileName);
                        fis = new FileInputStream(file);
                        //判斷當(dāng)前文件的字節(jié)個(gè)數(shù)
                        byte[] bytes = new byte[fis.available()];
                        while (fis.read(bytes) != -1) {
                            String message = new String(bytes);
                            String[] split = message.split("\\.");
                            tv_message.setText("用戶名:" + split[0] + "\n" + "密碼:" + split[1]);
                        }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (fis != null) {
                        try {
                            fis.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }

以上就是“Android內(nèi)部存儲(chǔ)與外部存儲(chǔ)實(shí)例代碼分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI