Android File Example 示例

Android 中存取文件位置有三種募舟,而且每種各有其讀取方式。

  1. apk 中的只讀資源文件
  2. SD 卡中的文件
  3. 數(shù)據(jù)區(qū)的文件(/data)

1. 資源文件的讀取

有兩種資源文件 rawassets顾孽,使用以下兩種不同的方式讀取:

val rawInputStream = context.resources.openRawResource(R.raw.test)
val assetsInputStream = context.assets.open(fileName) 

2. SD 卡數(shù)據(jù)讀寫

2.1 獲取權(quán)限

根據(jù)需要在 manifest 中加入以下內(nèi)容:

<!--寫-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--讀-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--創(chuàng)建修改-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

2.2 判斷 SD 卡狀態(tài)

Environment.getExternalStorageState()

如果手機裝有 SDCard,并且可以進行讀寫扳肛,那么方法返回的狀態(tài)等于Environment.MEDIA_MOUNTED叔汁。

2.3 獲取 SD 卡根目錄

Environment.getExternalStorageDirectory()

2.4 讀寫

val file = File(Environment.getExternalStorageDirectory(), "a.txt")
val inputStream = FileInputStream(file)
val outStream = FileOutputStream(file)

3. 數(shù)據(jù)區(qū)讀寫

3.1 寫操作

val fout = openFileOutput(fileName, Context.MODE_PRIVATE)

3.2 讀操作

val fin = openFileInput(fileName)

3.3 寫操作中的使用模式

MODE_APPEND:向文件尾寫入數(shù)據(jù)
MODE_PRIVATE:僅該程序可寫入數(shù)據(jù)
MODE_WORLD_READABLE:所有程序均可讀該文件數(shù)據(jù)
MODE_WORLD_WRITABLE:所有程序均可寫入數(shù)據(jù)

4. File 讀寫數(shù)據(jù)區(qū)示例

4.1 創(chuàng)建文件夾

private fun makeDir() {
  folder = File(filesDir, folderName)

  if (folder.exists()) {
    log("Directory \"${folder.path}\" existed.")
  } else {
    folder.mkdir()
    log("Create directory \"${folder.path}\".")
  }
}

4.2 新建并寫文件

private fun createFile() {
  file = File(folder, fileName)

  if (file.exists()) {
    log("File \"${file.path}\" existed.")
  } else {
    try {
      file.createNewFile()
      file.appendText("Hello.\n")
      log("Create \"${file.path}\" with \"Hello.\"")
    } catch (e: Exception) {
      e.printStackTrace()
    }
  }
}

4.3 讀文件

private fun readFile() {
  if (file.isFile) {
    try {
      log("Content from \"${file.path}\": ${file.readText(Charset.forName("UTF-8"))}")
    } catch (e: Exception) {
      e.printStackTrace()
    }
  }
}

4.4 復(fù)制

private fun copyFile() {
  copyFile = File(folder, copyName)

  if (file.isFile && !copyFile.isFile) {
    file.copyTo(copyFile)
    log("Copy \"${file.path}\" to \"${copyFile.path}\"")
  }
}

4.5 遍歷

private fun listFileNames() {
  log("Files includes in ${folder.name}: ")
  log("--------")
  folder.listFiles().forEach {
    log(it.name)
  }
  log("--------")
}

4.6 遞歸刪除文件夾

private fun deleteFolder() {
  folder.deleteRecursively()
}

4.7 變量及其它

private fun log(msg: String) {
  Log.d(javaClass.simpleName, msg)
  outStr += msg
  outStr += "\n\n"
}

private lateinit var folder: File
private lateinit var file: File
private lateinit var copyFile: File
private var outStr = ""

companion object {
  private val folderName = "xandeer"
  private val fileName = "a.txt"
  private val copyName = "a_copy.txt"
}

4.8 運行結(jié)果

點擊菜單 View -> Tool Windows -> Device File Explorer 统求,可查看當(dāng)前虛擬機的文件系統(tǒng),在 /data/user/0/me.xandeer.examples/files 中即可看到示例中添加的文件夾和文件攻柠。

4.9 其它鏈接

Github 源碼
File API

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末球订,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瑰钮,更是在濱河造成了極大的恐慌冒滩,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浪谴,死亡現(xiàn)場離奇詭異开睡,居然都是意外死亡因苹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門篇恒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扶檐,“玉大人,你說我怎么就攤上這事胁艰】钪” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵腾么,是天一觀的道長奈梳。 經(jīng)常有香客問我,道長解虱,這世上最難降的妖魔是什么攘须? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮殴泰,結(jié)果婚禮上于宙,老公的妹妹穿的比我還像新娘。我一直安慰自己悍汛,他們只是感情好捞魁,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著员凝,像睡著了一般署驻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上健霹,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天旺上,我揣著相機與錄音,去河邊找鬼糖埋。 笑死宣吱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瞳别。 我是一名探鬼主播征候,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼祟敛!你這毒婦竟也來了疤坝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤馆铁,失蹤者是張志新(化名)和其女友劉穎跑揉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡历谍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年现拒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片望侈。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡印蔬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脱衙,到底是詐尸還是另有隱情侥猬,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布岂丘,位于F島的核電站陵究,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏奥帘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一仪召、第九天 我趴在偏房一處隱蔽的房頂上張望寨蹋。 院中可真熱鬧,春花似錦扔茅、人聲如沸已旧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽运褪。三九已至,卻和暖如春玖瘸,著一層夾襖步出監(jiān)牢的瞬間秸讹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工雅倒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留璃诀,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓蔑匣,卻偏偏與公主長得像劣欢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子裁良,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容