Android中的File

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

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

用戶無(wú)法在手機(jī)文件夾訪問(wèn)的目錄 /data,此目錄下常用的有(不同rom會(huì)有差異)

  • /data/app用于保存已安裝應(yīng)用的apk文件;

  • /data/data保存已安裝應(yīng)用的app信息;

  • /data/data/package name保存具體應(yīng)用下的信息(如SharePreferences、DataBase等),當(dāng)app卸載時(shí),此目錄及其以下文件全部刪除。

外部存儲(chǔ)

用戶通過(guò)手機(jī)文件夾訪問(wèn)的目錄,如DCIM相冊(cè)文件夾,Download下載文件的位置

外部存儲(chǔ)包含出廠時(shí)自帶的存儲(chǔ),也包含sdcard。

外部存儲(chǔ)(除External獲取的)的數(shù)據(jù)與app無(wú)關(guān)聯(lián)性,知道具體路徑便可訪問(wèn)。因此app創(chuàng)建的文件夾無(wú)法在app卸載時(shí)被刪除。長(zhǎng)此以往,除用戶主動(dòng)刪除,外存的空間會(huì)逐漸減少。

獲取

1、getCacheDir() ----> /data/data/package name/cache/
2、getFilesDir() ----> /data/data/package name/files/
3、getExternalCacheDir() ----> 外部存儲(chǔ)路徑/Android/data/package name/cache/
4、getExternalFilesDir() ----> 外部存儲(chǔ)路徑/Android/data/package name/files/
5、getExternalStorageDirectory() ----> 非scared路徑的外部存儲(chǔ)路徑

1、2、3、4跟隨app的包名創(chuàng)建的目錄,清除緩存或卸載會(huì)將數(shù)據(jù)清除

1、2、3、4不需要申請(qǐng)權(quán)限,

3、4、5需要判斷是否存在外置SD(以前需要判斷scared是否已插入,但隨著發(fā)展android機(jī)基本都掛有外部存儲(chǔ))

5、需要自己手動(dòng)維護(hù)文件結(jié)構(gòu)

6.0之后動(dòng)態(tài)申請(qǐng)的權(quán)限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

文件操作

避免重復(fù)造輪子,取其我認(rèn)為需要記錄的內(nèi)容
Java和Android文件操作

File(File dir, String name)
File(String path)
File(String dirPath, String name)
File(URI uri)
這些構(gòu)造方法的實(shí)質(zhì)都是一樣的,就是構(gòu)造一個(gè)File實(shí)例,必須提供一個(gè)完整的文件路徑。
構(gòu)造了一個(gè)File實(shí)例,并不是說(shuō)就新建了一個(gè)文件或文件夾,這個(gè)File實(shí)例,只是實(shí)際系統(tǒng)內(nèi)文件實(shí)體的一個(gè)代表。
重要方法:public boolean exists() 判斷文件或文件夾是否存在

public boolean isFile() 判斷是否為文件

public boolean isDirectory 判斷是否為文件夾

public boolean createNewFile() 根據(jù)制定的路徑和文件名創(chuàng)建一個(gè)新的,空的文件

public boolean mkdir() 根據(jù)制定的路徑創(chuàng)建文件夾 (一級(jí)操作)

public boolean mkdirs() 根據(jù)制定的路徑創(chuàng)建文件夾 (多級(jí)操作)

public boolean delete() 刪除文件或文件夾

public boolean renameTo(File dest) 重命名文件或文件夾

public long length() 獲得文件的長(zhǎng)度,單位為 byte(文件夾不可用)

public String getName() 獲得文件或文件夾的名字

public String getAbsolutePath() 獲得文件或文件夾的絕對(duì)路徑

pubic String getPath() 獲得文件或文件夾的路徑

public File[] listFiles() 返回文件夾內(nèi)所有的File 對(duì)象

public String[] list() 返回文件夾內(nèi)所有的文件或文件夾的名字

讀寫(xiě)操作

Context已經(jīng)實(shí)現(xiàn)了快捷方法:

public FileInputStream openFileInput(String name)
public FileOutputStream openFileOutput(String name, int mode)

查看源碼會(huì)得知文件在getFilesDir()目錄下。

模式:

  • 私有模式
    1、只能被創(chuàng)建這個(gè)文件的當(dāng)前應(yīng)用訪問(wèn)
    2、若文件不存在會(huì)創(chuàng)建文件;若創(chuàng)建的文件已存在則會(huì)覆蓋掉原來(lái)的文件
    Context.MODE_PRIVATE = 0x0000;

  • 追加模式
    1、私有的
    2、若文件不存在會(huì)創(chuàng)建文件;若文件存在則在文件的末尾進(jìn)行追加內(nèi)容
    Context.MODE_APPEND = 0x8000;

  • 可讀模式
    1、創(chuàng)建出來(lái)的文件可以被其他應(yīng)用所讀取
    Context.MODE_WORLD_READABLE=0x0001;

  • 可寫(xiě)模式
    1、允許其他應(yīng)用對(duì)其進(jìn)行寫(xiě)入。
    Context.MODE_WORLD_WRITEABLE=0x0002;

以上文件操作模式均針對(duì)保存在手機(jī)自帶存儲(chǔ)空間的文件。若文件存儲(chǔ)在SDCard上,則不受讀寫(xiě)控制。

讀寫(xiě)操作中有FileInputStream、FileOutputStream兩個(gè)流,但實(shí)際java中的流有兩類(lèi)。

流.png

字節(jié)流:讀取的數(shù)據(jù)以字節(jié)為單位(byte),8bit

字符流:讀取的數(shù)據(jù)以字符為單位(char),16bit

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評(píng)論 19 139
  • 一、基礎(chǔ)知識(shí):1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,565評(píng)論 0 4
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 7,334評(píng)論 0 17
  • 我在適配iPhone x的時(shí)候,我修改了searchBar的背景顏色后,在編輯狀態(tài)總是出現(xiàn)一條黑線 未處理背景色的...
    落寒z閱讀 464評(píng)論 0 1
  • 文/G哥 今天跟大家聊一個(gè)很有意思的話題:為什么在學(xué)語(yǔ)言上的時(shí)候,我們首先學(xué)會(huì)的,往往是一些罵人的話呢? 你一定也...
    G哥閱讀 1,600評(píng)論 1 5

友情鏈接更多精彩內(nèi)容