當前位置:首頁 » 存儲配置 » android本地文件存儲

android本地文件存儲

發布時間: 2023-05-22 09:53:15

① android怎麼用gson做本地存儲

Android存儲文件通常可以用SharedPreferences、SQLite、Content Provider和File,但是SharedPreferences只支持簡單的key-value,
通常,如果要存儲一個對象,可以先把它序列化,然後用輸入輸出流存進file文件

另一個我比較喜歡的方式是:
寫:先把一個對象用gson解析成json字元串(使用gson的toJson函數),然後當成一個value寫進SharedPreferences裡面
讀:讀取出來的時候就再次用gson把json解析成對象(使用gson的fromJson函數)
參考:
Android中的JSON詳細總結

怎樣使用Gson 解析 (deserialize) json字元串

Gson簡要使用筆記

代碼實現:

② Android文件存儲和數據存儲一樣嗎

本人不是程序員,底層的東西不知道。但是,它的文件結構略知一二。其實android系統和應用分為系統app和自己安裝的app兩種。其中系統app是存放在/system/app中,而自己安裝的在/data/app中。有一部分系統應用會更新,更新後的文件是放在/data/app中並沒有更改/system/app中的文件所以不需要root許可權。而安裝到sd卡就可以理解為把/data/app中的部分文件。映射到sd卡中了。更我的理解有時會讀取到原始app的信息只有優先權的問題。至於後面的一個問題。也是因手機而異的。不過現在手機普遍採取的分區方式是/.+/data+/sdcard0的分區方式。不過很多手機的/sdcard0掛載方式不一樣。

③ android 中文件存儲以及幾種操作模式

  1. 內存緩存手緩羨哪螞,畢拍Lrucache

  2. 本地文件存儲,File

  3. 網路存儲

④ 獲取android手機的自帶存儲路徑和sdcard存儲路徑

android手機獲取自帶存儲路徑和sd卡存儲路徑的方式是:

調用Environment.getExternalStorageDirectory,返回的存儲目錄並不是系統內置的SD卡目錄。


1、手機將eMC存儲掛載到/mnt/external_sd、/mnt/sdcard2等節點,而將外置的SD卡掛載到Environment.getExternalStorgeDirectory這個結點。

2、而另一部分手機直接將eMMC存儲掛載在Environment.getExternalStorageDirectory這個節點,而將真正的外置SD卡掛載到/mnt/external_sd、/mnt/sdcard2等節點。調用Environment.getExternalStorgeDirectory,則返回內置的SD的路徑。

(4)android本地文件存儲擴展閱讀:

Android在正式發行之前,最開始擁有兩個內部測試版本,並且以著名的機器人名稱來對其進行命名,它們分別是:阿童木(AndroidBeta),發條機器人(Android1.0)。後來由於涉及到版權問題,谷歌將其命名規則變更為用甜點作為它們系統版本的代號的命名方法。

Android的系統架構和其操作系統一樣,採用了分層的架構。從架構圖看,Android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和Linux內核層。

⑤ 用安卓手機接收QQ文件後儲存在哪裡

打開自己的手機文件管理,在手機中找到,文件管理工具,並打開。

打開之後我們可以看見現在的文件管理裡面直接可以看到的東西有:圖片、音樂、視頻、壓縮包等等的文件。但是像手機接收到纖局陵的其他文件是看不到的,需要自己去查找。

⑥ Android 保存圖片到本地。

這里只介紹按下「保存」後如何將一個Bitmap對象保存為圖片文件的執行步驟,對圖片的下載,圖片到Bitmap對象的轉換,Bitmap對象的格式轉換和壓縮,以及界面設計部分全部都忽略了。

  • 確定存儲路徑

  • 獲取外部存儲許可權

  • 確定外部存儲狀態

  • 確定文件名

  • 保存到文件中

  • 發送廣播,通知系統掃描保存後的文件

  • 確定存儲路徑

    在Android中文件存儲路徑包括內部存儲和外部存儲兩種類型。

    對內部存儲,當一個app被安裝到手機後,Android系統會在內部存儲的/data/data/目錄下創建一個以包名稱命名的文件夾。例如/data/data/com.sohu.inputmethod.sogou/。一個應用對內部存儲的所有訪問都被限制在這個文件夾中,也就是說Android應用只能在該目錄中讀取,創建,修改文件。對該目錄之外的其他內部存儲中的目錄都沒有任何操作的許可權。因此,如果將圖片保存在內部存儲中,只能被應用自身讀取,其他應用均無法讀取。如果需要讓系統圖庫,相冊或其他應用能夠找到保存的圖片,必須將圖片保存到外部存儲中。

    對外部存儲,當一個app被安裝到手機後,Android系統會在外部存儲的/Android/data/目錄下創建一個以包名命名的文件夾(這里第一個/不是根路徑,而是相對外部存儲所掛載路徑的相對路徑)。例如/storage/emulated/0/Android/data/com.sohu.inputmethod/。這個路徑同樣只能被應用自身讀取,其他應用不能訪問。因此,也不能將圖片保存在這個目錄中。

    除外部存儲的/Android目錄之外的其他目錄一般都是可以被其他應用訪問的。目前,大多數應用都會在外部存儲的根路徑下建立一個類似包名的多層目錄,以存儲需要共享的文件。例如/storage/emulated/0/sogou/image/。還需要注意的是,很多查看圖片的應用都支持按照文件夾來查看圖片。如果將圖片所在的文件夾取名為image,photo之類的,就無法和其他文件夾區分開,用戶也不能識別該文件夾的用途。因此最好取一個有區分度的文件夾名字,例如網路貼吧就保存在/tieba目錄,微信是保存在/tencent/MicroMsg/WeiXin目錄。

    由於Android系統的碎片化問題,不同設備上外部存儲的路徑很可能會不同,因此,不能直接使用/storage/emulated/0/作為外部存儲的根路徑。
    Android SDK中 Environment類 提供了getExternalStorageDirectory()方法來獲取外部存儲的根路徑。示例如下:

    [java]view plain

  • Stringdir=Environment.getExternalStorageDirectory().getAbsolutePath()+"/tencent/MicroMsg/WeiXin/"

  • 需要注意的是Environment.getExternalStorageDirectory()返回的路徑中最後一個字元不是/,如果需要創建子目錄,需要在子目錄的前後都加上/。

    獲取外部存儲許可權

    由於需要在外部存儲中寫文件,需要在AndroidManifest.xml中增加如下的許可權聲明。

    [java]view plain

  • <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

  • 確定外部存儲狀態

    由於外部存儲需要被掛載,也可以被卸載,在寫入文件之前,需要先判斷外部存儲的狀態是否正常。只有狀態正常情況下才可以執行保存文件的操作。獲取外部存儲狀態同樣是通過Environment類,通過Environment.getExternalStorageState()可以得到一個字元串,來表示外部存儲的狀態。同時在Environment類中定義了一系列的String常量表示不同的狀態。在所有的狀態中只有內部存儲處於Environment.MEDIA_MOUNTED狀態時才可以讀寫文件,因此,需要將獲取到的狀態和Environment.MEDIA_MOUNTED做比較,如果不是Environment.MEDIA_MOUNTED狀態,就返回保存失敗。示例如下。

    [java]view plain

  • //獲取內部存儲狀態

  • Stringstate=Environment.getExternalStorageState();

  • //如果狀態不是mounted,無法讀寫

  • if(!state.equals(Environment.MEDIA_MOUNTED)){

  • return;

  • }



  • 確定文件名

    保存的圖片文件名可以由應用根據自身需要自行確定,一般來說需要有一個命名規則,然後根據命名規則計算得到文件名。
    這里列舉幾種常見的命名規則。

  • 隨機命名
    這種命名規則是隨機生成一個字元串或一組數字來對圖片命名。
    字元串可以通過UUID來生成,數字可以通過Random()類來生成,例如:

    [java]view plain

  • //通過UUID生成字元串文件名

  • StringfileName1=UUID.randomUUID().toString();

  • //通過Random()類生成數組命名

  • Randomrandom=newRandom();

  • StringfileName2=String.valueOf(random.nextInt(Integer.MAX_VALUE));

  • 這種命名規則是按照數字從小到大的順序來對圖片命名。
    在程序啟動時先獲取圖片文件名中當前最大數字的文件名,之後每保存一張圖片就將數字加1即可。

  • 時間命名
    這種命名規則是根據保存圖片的當前系統時間來對圖片命名。
    系統時間可以通過System.currentTimeMillis()來獲取,不過System.currentTimeMillis()獲取到的時間是一個long型的整數,如果用它做文件名,無法通過文件名直接看出文件的具體保存時間。可以通過SimpleDateFormat先對當前時間做格式化,然後再將其作為文件名來使用。例如:

    [java]view plain

    使用這種命名規則來命名需要注意的是同一秒鍾可能會有多張圖片需要保存,在得到當前系統時間對應的文件名後,需要判斷該文件是否存在。如果文件已經存在,需要重新生成文件名。重新生成的文件名可以在之前的文件名後加上一個隨機數後綴,或者是用毫秒數做後綴。

  • Calendarnow=newGregorianCalendar();

  • SimpleDateFormatsimpleDate=newSimpleDateFormat("yyyyMMddHHmmss",Locale.getDefault());

  • StringfileName=simpleDate.format(now.getTime());

  • 文件URL命名
    每張網路圖片都有一個對應的圖片URL,可以根據圖片的URL來對圖片命名。
    不過URL中會包含一些不能用作文件名的特殊字元,此外直接用URL來命名可能會帶來安全問題。為了避免這兩個問題,可以將圖片URL的MD5值作為文件名來使用。由於MD5是不可逆的,也就無法通過MD5值反向得到圖片URL,同時MD5值對應的字元串只包含[0-9A-Z],不包含特殊字元,可是作為文件名使用。
    由於每張圖片的URL是唯一的,其對應的文件名也就是唯一的。如果需要每張網路圖片只能生成一個文件,不允許保存為多份拷貝,可以用這種命名規則。在得到URL對應的文件名後,先判斷文件是否已經存在,如果已經存在,直接覆蓋或不處理。

  • 保存到文件中

    保存圖片文件時,通過Bitmap的compress()方法將Bitmap對象壓縮到一個文件輸出流中,然後flush()即可。示例如下。

    [java]view plain

  • try{

  • Filefile=newFile(dir+fileName+".jpg");

  • FileOutputStreamout=newFileOutputStream(file);

  • mBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);

  • out.flush();

  • out.close();

  • }catch(Exceptione){

  • e.printStackTrace();

  • }



  • 發送廣播,通知系統掃描保存後的文件

    至此,已經實現將Bitmap對象保存成外部存儲中的一個jpg格式的文件。但此時該文件只是保存在外部存儲的一個目錄中,必須進入其所在的目錄中才可以看到。在系統圖庫,相冊和其他應用中無法看到新建的圖片文件。為了讓其他應用能夠知道圖片文件被創建,必須通知MediaProvider服務將新建的文件添加到圖片資料庫中。

    Android系統中常駐一個MediaProvider服務,對應的進程名為android.process.media,此服務用來管理本機上的媒體文件,提供媒體管理服務。在系統開機或者收到外部存儲的掛載消息後,MediaProvider會調用MediaScanner,MediaScanner會掃描外部存儲中的所有文件,根據文件類型的後綴將文件信息保存到對應的資料庫中,供其他APP使用。

    MediaScannerReceiver是一個廣播接收者,當它接收到特定的廣播請求後,就會去掃描指定的文件,並根據文件信息將其添加到資料庫中。當圖片文件被創建後,就可以發送廣播給MediaScannerReceiver,通知其掃描新建的圖片文件。示例如下。

    [java]view plain

  • try{

  • Filefile=newFile(dir+fileName+".jpg");

  • FileOutputStreamout=newFileOutputStream(file);

  • mBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);

  • out.flush();

  • out.close();

  • //保存圖片後發送廣播通知更新資料庫

  • Uriuri=Uri.fromFile(file);

  • sendBroadcast(newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri));

  • }catch(Exceptione){

  • e.printStackTrace();

  • }



  • 圖片的非同步保存

    保存圖片文件時,如果圖片很大,或需要同時保存多張圖片時,就需要較多的時間。為了避免阻塞UI線程,出現幀率下降或ANR,通常需要將圖片保存操作放到線程中去執行。當圖片保存完畢後通過sendMessage()方法通知UI線程保存結果。
    將圖片保存放到後台線程去執行需要增加一些同步機制避免一些多線程問題。例如有兩張圖片需要保存,分別放到兩個線程中去執行,保存圖片時文件名以數字順序增加。第一個線程選中文件名為125.jpg,但此時文件還未創建,第二個線程判斷125.jpg不存在,於是也選取125.jpg作為文件名,兩張圖片就保存到同一個文件中了。

⑦ 安卓機怎麼查看手機文件夾

查看安卓手機自身存儲空間文件夾的方法:
1、打開手機。
2、打開「應用程序」。
3、找到並打開「文件管理」。
4、找到需要打開的文件夾即可。
安卓系統手機SD卡文件管理方法:
1、打開「應用程序」。
2、找到並打開「文件管理」。
3、打開「EXsdcard」。
4、即可開始管理SD卡的文件。

⑧ Android開發不知道文件存儲位置

「/storage/emulated/0」這個路徑就是文件管理器的根路徑,也就是圖片框里的路徑,也就是說你把錄音文件存放在文件管理器的最外邊了,不需要點進去。現在你點進去的這個路徑相當於是「/storage/emulated/0/storage/emulated/0」。

⑨ 怎麼查看安卓手機自身內存里的文件夾

1、首先在手機中,打開可以查看文件的軟體,如下圖所示。

⑩ 安卓機微信保存的文件在哪裡

如果您使用的是vivo手機,辛苦您按照以下方法查看:
文件管理版本V5.5.2.9以下(安卓8.1及以上機型):微信新版本更改了文件保存目錄,請您進入文件管理--手機存儲/所有文件/本地文件/SD卡Android/data/com.tencent.mm/MicroMsg/Download中進行查看,後續文件管理更新會進行優化,屆時可在文件管理--微信分類下進行查看。
備註:文件管理V5.5.2.9開始即可在微信分類中顯示。
文件管理版本V5.5.2.9以下(安卓8.1以下機型):文件管理分類下不支持顯示。
微信新版本更改了文件保存目錄,請您進入文件管理--手機存儲/所有文件/本地文件/SD卡--Android/data/com.tencent.mm/MicroMsg/Download中進行查看。
微信文件的保存路徑如下:
1、進入文件管理--微信中查看最近傳輸的文件;
2、進入文件管理--本地文件/所有文件/SD卡/手機存儲--tencent--MicroMsg--WeiXin或第一個文件夾中查找;
3、進入文件管理--本地文件/所有文件/SD卡/手機存儲--Android--data--com.tencent.mm--MicroMsg--Download中查看。

熱點內容
安卓輸入法哪個詞庫好 發布:2025-02-08 00:03:47 瀏覽:90
c存儲過程數據集 發布:2025-02-08 00:03:42 瀏覽:924
qq卡的密碼在哪裡找 發布:2025-02-07 23:59:32 瀏覽:964
安卓為什麼注冊不了lysn 發布:2025-02-07 23:55:36 瀏覽:93
十個字母無壓縮 發布:2025-02-07 23:54:51 瀏覽:380
java惡作劇小程序 發布:2025-02-07 23:53:48 瀏覽:671
openvas源碼 發布:2025-02-07 23:48:14 瀏覽:318
面java 發布:2025-02-07 23:36:21 瀏覽:617
編譯原理練習題第三章答案 發布:2025-02-07 23:35:05 瀏覽:752
爐石寫腳本 發布:2025-02-07 23:31:24 瀏覽:985