首頁 > 軟體

Android內部儲存與外部儲存的範例講解

2023-03-21 06:02:12

什麼是內部儲存和外部儲存

1.內部儲存與外部儲存的儲存媒介:

內部儲存的媒介:RAM(記憶體) + 內部ROM

外部儲存的媒介:外部ROM + SDCard(TS卡等等)。

2.內部儲存與外部儲存的儲存特點:

一般來說,以/data開頭的是內部儲存。且內部儲存不需要任何許可權。

例如:

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

內部儲存需要關注的資料夾:

app資料夾(未root無法開啟):存放著所有app的apk資料夾

data資料夾:內部都是app的包名,儲存著應用程式相關的資料,例如 data/data/包名/(shared_prefs、database、files、cache)

Android SDK提供了幾個常見的內部儲存檔案的許可權

  • Context.MODE_PRIVATE :私有方式儲存,其他應用無法存取,覆蓋舊的同名檔案
  • Context.MODE_APPEND:私有方式儲存,若有舊的同名檔案,則在該檔案上追加資料

一般來說,外部儲存會放在storage資料夾下或者mnt資料夾下。且需要安卓的許可權。

例如:

私有外部儲存

  • /storage/emulated/0/Android/data/< applicationId >/files/Music //Context.getExternalFilesDir() 包含如Music等資料夾
  • /storage/emulated/0/Android/data/< applicationId >/cache //Context.getExternalCacheDir 外部快取檔案

以及共有外部儲存

/storage/emulated/0 Environment.getExternalStorageDirectory()

/storage/emulated/0/Pictures

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)

外部儲存需要注意的資料夾即外部儲存的分類:

storage中有一個sdcard資料夾,sdcard下面可以分兩類儲存:

外部共有儲存(共有目錄):裡面常見的有Pictures、Download等資料夾.

外部私有儲存(私有目錄):系統中的資料。

內部儲存與外部儲存的資料夾:

3.內部儲存與外部儲存,釋放記憶體方面的總結:

內部儲存:隨應用解除安裝被刪除。外部儲存:

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

2.私有目錄:隨應用解除安裝被刪除。

內部儲存與外部儲存的程式碼範例

內部儲存

				// 存
 				FileOutputStream fos = null;
                try {
                    //第一個引數:檔名
                    //第二個引數:表示檔案輸出的型別 這裡選擇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() 判斷檔案有多少個位元組
                    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();
                }

外部儲存

// 獲取外部儲存地址的位置並建立檔案:
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 {
                    //第一個引數:檔案目錄 第二個引數:檔名
                    //getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)對應的路徑為:
                    // /storage/emulated/0/Android/data/com.example.customviewproject/files/Download
                    File file = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), fileName);
                        fis = new FileInputStream(file);
                        //判斷當前檔案的位元組個數
                        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內部儲存與外部儲存的範例講解的文章就介紹到這了,更多相關Android內部儲存與外部儲存內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com