Android應用開發——文件目錄

Android 存儲位置及 API

一、內部存儲

應用安裝后都會在Android 根目錄生成 /data/data/packagename,當前應用讀取不需要讀寫權限

注意: 有些開發者可能看到過應用的根目錄為 /data/user/0/packagename 的情況,這里解釋一下,Android 4.2 版本添加了同一設備可以登錄不同用戶的功能(由于專利原因僅限于平板電腦,手機不支持此功能),所以為了區分不同用戶在同一應用中的設置和存儲的數據,添加了該系列的路徑,該路徑指向 /data/data/packagename

getFileDir() 方法得到的是該目錄下 files 文件夾的 File 對象
getChacheDir() 方法得到的是該目錄下 cache 文件夾的 File 對象
直接調用ContextWrapper的 openFileOutput(String name,int mode) 也會在該目錄下 files 文件夾下創建相應的文件,并且是私密的。可以修改為其他應用可訪問的,通過 openFileOutput 方法的 mode 參數來完成
注意:

  • 該目錄只有 root 權限下可以查看,會隨著應用卸載刪除
  • 應用程序詳情中清除數據會將 packagename 下所有數據以及內置存儲、外置 SD 卡存儲空間中 /Android/data/packagename 的整個目錄刪除刪除
  • 應用程序詳情中清除緩存會將 packagename/cache 目錄下所有數據以及內置存儲、外置 SD 卡存儲空間中 /Android/data/packagename/cache 的整個目錄刪除
二 內置存儲
手機自帶 ROM 的存儲路徑

getExternalCacheDir() 方法,獲取內置存儲卡中 /Android/data/packagename/cache 目錄的路徑,4.4及之后讀寫不需要權限,會隨著應用卸載刪除
getExternalFilesDir() 方法,獲取內置存儲卡中 /Android/data/packagename/files 目錄的路徑,4.4之后讀寫不需要權限,會隨著應用卸載刪除,該方法參數為 “null” 時不指定子文件夾,指定時創建子文件夾保存文件。創建的文件其他應用只要有讀寫權限也可以讀取,如果要私密的就使用內部存儲。
Environment.getExternalStorageDirectory() 方法得到的是內置存儲目錄的根路徑目錄,讀寫需要權限,不會隨著應用卸載刪除
Environment.getExternalStoragePublicDirectory() 方法得到的是內置存儲目錄根路徑下的特定類型文件的公共目錄,讀寫需要權限,不會隨著應用卸載刪除
注意,內置存儲中 /Android/data/packagenaem/ 路徑的讀寫 Android 版本不同,需要權限不同,所以開發時應始終聲明讀寫權限

三、外置SD存儲卡

支持外置SD存儲卡的機器,可以由 ContextCompat 的 getExternalFilesDirs() 方法得到所有存儲根目錄下 /Android/data/packagename/files 路徑的數組,如果該方法第二個參數不為 null 則會再創建相應子級文件夾。再根據數組遍歷,即可操作相應的存儲路徑進行讀寫。4.4及之后該操作不需要聲明讀寫權限。
File[] files = ContextCompat.getExternalFilesDirs(this, “”);

注意:

通過該方法得內置存儲卡的路徑,可以對根據 getParent 系列方法可以得到上一級的路徑進行讀寫操作,但需要權限
通過該方法得外置SD存儲卡的路徑,但是不可以對根據 getpParent 系列方法得到的上級路徑進行寫,如果寫會報沒有權限異常,即使聲明寫權限也沒用。聲明讀權限后可正常進行讀操作。
內置和外置SD存儲卡中 Android/data/packagename 目錄,都會在應用程序詳情中清除數據和應用卸載時被刪除。

作者:renxuelong
鏈接:https://www.jianshu.com/p/d5945c726182
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449958.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449958.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449958.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

git常用命令及沖突解決

2019獨角獸企業重金招聘Python工程師標準>>> git常用命令 git config --global user.name chenhongjiang git config --global user.email 123qq.com git init 建立廠庫 git status 查看狀態 git add . 添加當前目錄 git add a.php 添加文件…

C 語言常見問題集

從 http://c-faq-chn.sourceforge.net/ccfaq/index.html 轉載過來,學習C的好助手。 目錄1. 前言2. 聲明和初始化 2.1 我如何決定使用那種整數類型?2.2 64 位機上的 64 位類型是什么樣的?2.3 怎樣定義和聲明全局變量和函數最好?2.4…

【題解】quake

【題解】\(quake\) 題目大意 我們共有報酬\(f\)元,一條邊有它的價值\(w_i\),有它的建造時間\(t_i\)。要求建一些邊,生成一顆樹。求最大的利潤率。 數據范圍 \(n\le 400\) \(m\le10000\) \(Solution\) 實際上\(n,m\)出到\(\le 100000\)應該也是沒問題的。…

Android應用開發——service連接泄露異常:android.app.ServiceConnectionLeaked: that was originally bound here

在做service開發過程中,大部分可能會遇到以下異常,該異常僅通過log輸出,并不會導致app crash。 E/ActivityThread: Activity com.example.image.all_samples.Main2Activity has leaked ServiceConnection com.example.image.all_samples.Mai…

Linux more命令、Linux rhmask命令

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Linux more 命令類似 cat ,不過會以一頁一頁的形式顯示,更方便使用者逐頁閱讀,而最基本的指令就是按…

從零開始學習PYTHON3講義(二)把Python當做計算器

《從零開始PYTHON3》第二講 上一講我們說過了如何啟動Python IDLE集成開發學習環境,macOS/Linux都可以在命令行執行idle3。Windows則從開始菜單中去尋找IDLE程序的圖標。 上一講我們還見到了Python的兩種工作模式,交互模式和程序模式。 通常在一個大型的…

Tranquility

本頁目錄與Kafka集群交互Druid使用Tranquility Kafka本文以Kafka為例,介紹在E-MapReduce中如何使用Tranquility從Kafka集群采集數據,并實時推送至Druid集群。 Tranquility是一個以push方式向Druid實時發送數據的應用。它替用戶解決了分區、多副本、服務發…

Iot相關雜燴

人工智能就像人的大腦,而 IoT 就像人的神經網絡 1)在天空中巨大的鳥群里,每一只鳥兒都實時判斷自己和四周同伴的距離。這時,它們各自都是一個物聯網節點。2)這些“節點”并不是簡單地收集數據,而是在實時計…

水滴石穿C語言之指針、數組和函數

基本解釋   1、指針的本質是一個與地址相關的復合類型,它的值是數據存放的位置(地址);數組的本質則是一系列的變量。   2、數組名對應著(而不是指向)一塊內存,其地址與容量在生命期內保持…

告訴你銀行在年底為存儲做的小動作

25年前,銀行的存款利率是10.98%,可謂巔峰時刻。15年前,銀行的存款利率開始下降,降到了8%的利率。 到了5年前,銀行的存款利率毫無回轉之勢,直線下降到了5%的利率。 而如今,我們無可奈何地接受了2…

爬蟲學習(五)——百度貼吧的爬取

import osimport timeimport urllib.requestimport urllib.parse# 輸入目標頁碼和吧名def header(): url "https://tieba.baidu.com/f?" baming input("請輸入要爬取的吧名") start_page int(input("請輸入起始頁")) end_page …

什么是嵌入式設備?/ 嵌入式設備的定義

什么是嵌入式設備?/ 嵌入式設備的定義 區別于通用計算機的其他設備都可以稱之為嵌入式設備 (個人電腦,服務器) 一段時期內,必備的硬件配置。 嵌入式開發包括哪些部分: 底層驅動開發: 關鍵字…

Linux mv命令、Linux cp命令、Linux scp命令

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Linux mv命令用來為文件或目錄改名、或將文件或目錄移入其它位置。 語法 mv [options] source dest mv [options] source... director…

創業者談:畏懼失敗,但也要擁抱失敗

摘要:本文作者為Paydirt創始人Tristan Gamilis,他在文中分享了如何面對創業過程中的失敗。作為一個創業者,開始的時候并非全才,很多知識都是經歷了創業中的失敗,摸爬滾打之后才學會的。所以,我們在創業過程…

基于STM32F4移植W5500官方驅動庫ioLibrary_Driver(轉)

源: 基于STM32F4移植W5500官方驅動庫ioLibrary_Driver 參考: 基于STM32W5500 的Ethernet和Internet移植 Upgrade W5500 Throughput on Nucleo STM32F401RE Using SPI DMA

redis 資料

redis是什么: Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets. redis是開源,BSD許可,高級的key-value存儲系統. 可以用來存儲字…

Android應用開發——onStop的調用時機

onStop的調用時機,網上搜索到的說法大概是:“ onStop的調用是“The activity is no longer visible”,也就是完全不可見的時候調用的,這個完全不可見真的就是指視覺上的完全看不到而已,無論是按home鍵返回桌面&#xf…

UnaryOperator函數式接口

2019獨角獸企業重金招聘Python工程師標準>>> 這是一個函數式接口&#xff0c;因此可以用作lambda表達式或方法引用的賦值目標。 可以看到UnaryOperator<T>繼承了Function<T,T>接口&#xff0c;這里可是兩個T,T,還增加了static修飾的identity()方法。 然…

從程序員到項目經理

推薦研發工程師必看的內容 從程序員到項目經理 從程序員到項目經理”&#xff0c;這個標題讓我想起了很久以前一本書的名字《從Javascript到Java》。然而&#xff0c;從Javascript到Java充其量只是工具的更新&#xff0c;而從程序員到項目經理&#xff0c;卻是一個脫胎換骨的過…

linux--命令rcp和scp

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 rcp代表“remote file copy”&#xff08;遠程文件拷貝&#xff09;。該命令用于在計算機之間拷貝文件。rcp命令有兩種格式。第一種格式…