本文概述

Android外部存储空间是我们执行读写操作的存储空间。外部存储器中的文件存储在/ sdcard或/ storage文件夹等中。保存在外部存储器中的文件是可读的, 并且可由用户修改。

在访问应用程序外部存储中的文件之前, 我们应检查设备中外部存储的可用性。

写入外部存储中的文件

java.io包提供openFileOutput()方法, 该方法返回FileOutputStream类的实例, 以将文件写入设备的外部存储中。通过调用getExternalFilesDir()获取仅由你的应用程序使用的目录。要将数据写入文件, 请调用FileOutputStream .write()方法。

var myExternalFile:File = File(getExternalFilesDir(filepath), fileName)

try {

val fileOutPutStream = FileOutputStream(myExternalFile)

fileOutPutStream.write(fileContent.toByteArray())

fileOutPutStream.close()

} catch (e: IOException) {

e.printStackTrace()

}

从外部存储读取文件内容

java.io包提供了openFileInput()方法, 该方法返回FileInputStream类的实例, 并从设备的外部存储读取文件。要从文件读取数据, 请调用BufferedReader()。readLine()。

var myExternalFile:File = File(getExternalFilesDir(filepath), fileName)

val filename = fileName.text.toString()

myExternalFile = File(getExternalFilesDir(filepath), filename)

var fileInputStream =FileInputStream(myExternalFile)

var inputStreamReader: InputStreamReader = InputStreamReader(fileInputStream)

val bufferedReader: BufferedReader = BufferedReader(inputStreamReader)

val stringBuilder: StringBuilder = StringBuilder()

var text: String? = null

while ({ text = bufferedReader.readLine(); text }() != null) {

stringBuilder.append(text)

}

fileInputStream.close()

外部存储访问权限

在AndroidManifest.xml文件中添加以下权限。

Kotlin Android读写外部存储示例

在此示例中, 我们将数据写入外部存储设备中的文件, 并从同一外部存储设备读取相同的文件内容。

activity_main.xml

在activity_main.xml文件中添加以下代码。在此文件中, 为输入文件名, 文件内容添加两个EditText, 并为保存和查看文件内容添加两个Button。

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="example.srcmini.com.kotlinexternalstoragereadwrite.MainActivity">

android:id="@+id/textView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@+id/textView2"

android:layout_alignParentTop="true"

android:layout_alignStart="@+id/textView2"

android:layout_marginTop="68dp"

android:text="File Name"

android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintHorizontal_bias="0.027"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent"

app:layout_constraintVertical_bias="0.065" />

android:id="@+id/textView2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBottom="@+id/editTextData"

android:layout_alignParentLeft="true"

android:layout_alignParentStart="true"

android:layout_marginBottom="36dp"

android:layout_marginLeft="50dp"

android:layout_marginStart="50dp"

android:text="File Data"

android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintHorizontal_bias="0.027"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@+id/textView"

app:layout_constraintVertical_bias="0.167" />

android:id="@+id/editTextFile"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@+id/editTextData"

android:layout_alignStart="@+id/editTextData"

android:layout_alignTop="@+id/textView"

android:ems="10"

android:inputType="none" />

android:id="@+id/editTextData"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentEnd="true"

android:layout_alignParentRight="true"

android:layout_below="@+id/editTextFile"

android:layout_marginEnd="37dp"

android:layout_marginRight="37dp"

android:layout_marginTop="30dp"

android:ems="10"

android:inputType="none"

android:lines="5" />

android:id="@+id/button_save"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:layout_marginBottom="68dp"

android:layout_toLeftOf="@+id/editTextData"

android:layout_toStartOf="@+id/editTextData"

android:text="Save" />

android:id="@+id/button_view"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBottom="@+id/button_save"

android:layout_alignEnd="@+id/editTextData"

android:layout_alignRight="@+id/editTextData"

android:layout_marginEnd="43dp"

android:layout_marginRight="43dp"

android:text="View" />

MainActivity.kt

在MainActivity.kt类中添加以下代码。在此类中, 我们将通过单击保存按钮将文件名和数据保存在外部存储器中, 并通过单击查看按钮来检索文件内容。

package example.srcmini.com.kotlinexternalstoragereadwrite

import android.support.v7.app.AppCompatActivity

import android.os.Bundle

import android.view.View

import android.widget.Button

import android.widget.EditText

import android.widget.Toast

import android.os.Environment

import java.io.*

class MainActivity : AppCompatActivity() {

private val filepath = "MyFileStorage"

internal var myExternalFile: File?=null

private val isExternalStorageReadOnly: Boolean get() {

val extStorageState = Environment.getExternalStorageState()

return if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(extStorageState)) {

true

} else {

false

}

}

private val isExternalStorageAvailable: Boolean get() {

val extStorageState = Environment.getExternalStorageState()

return if (Environment.MEDIA_MOUNTED.equals(extStorageState)) {

true

} else{

false

}

}

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

val fileName = findViewById(R.id.editTextFile) as EditText

val fileData = findViewById(R.id.editTextData) as EditText

val saveButton = findViewById(R.id.button_save) as Button

val viewButton = findViewById(R.id.button_view) as Button

saveButton.setOnClickListener(View.OnClickListener {

myExternalFile = File(getExternalFilesDir(filepath), fileName.text.toString())

try {

val fileOutPutStream = FileOutputStream(myExternalFile)

fileOutPutStream.write(fileData.text.toString().toByteArray())

fileOutPutStream.close()

} catch (e: IOException) {

e.printStackTrace()

}

Toast.makeText(applicationContext, "data save", Toast.LENGTH_SHORT).show()

})

viewButton.setOnClickListener(View.OnClickListener {

myExternalFile = File(getExternalFilesDir(filepath), fileName.text.toString())

val filename = fileName.text.toString()

myExternalFile = File(getExternalFilesDir(filepath), filename)

if(filename.toString()!=null && filename.toString().trim()!=""){

var fileInputStream =FileInputStream(myExternalFile)

var inputStreamReader: InputStreamReader = InputStreamReader(fileInputStream)

val bufferedReader: BufferedReader = BufferedReader(inputStreamReader)

val stringBuilder: StringBuilder = StringBuilder()

var text: String? = null

while ({ text = bufferedReader.readLine(); text }() != null) {

stringBuilder.append(text)

}

fileInputStream.close()

//Displaying data on EditText

Toast.makeText(applicationContext, stringBuilder.toString(), Toast.LENGTH_SHORT).show()

}

})

if (!isExternalStorageAvailable || isExternalStorageReadOnly) {

saveButton.isEnabled = false

}

}

}

AndroidManifest.xml

package="example.srcmini.com.kotlinexternalstoragereadwrite">

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">

输出:

kotlin读取sd卡里的文件_Kotlin Android读写外部存储相关推荐

  1. kotlin读取sd卡里的文件_Kotlin 读取文件

    Kotlin 读取文件教程显示了如何在 Kotlin 中读取文件. 我们展示了几种在 Kotlin 中读取文件的方法. 在本教程中,我们使用File方法读取文件. 本教程提供了五个示例,这些示例在 K ...

  2. kotlin读取sd卡里的文件_如何在Kotlin中写入文件?

    其他有趣的变化,因此您可以看到Kotlin的强大功能: 通过创建字符串以一次全部写入的快速版本: File("somefile.txt").writeText(history.en ...

  3. 读取SD卡里面的BMP文件 显示到TFT上

    读取SD卡里面的BMP文件 显示到TFT上 http://blog.csdn.net/yunxianpiaoyu/article/details/8841755 我刚好最近做了一个BMP565格式的图 ...

  4. 读取sd卡里的jar包

    读取sd卡里的jar包并使用里面的类 button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClic ...

  5. STM32通过SDIO读取SD卡,FATFS文件管理系统

    STM32cubemx配置FATFS,读取SD卡: 1 准备工具: STM32CubeMx,keil,正点原子STM32F103,SD卡. 2打开cubemx配置工程: 2.1 配置时钟 选择高速外部 ...

  6. 数据恢复之相机SD卡里视频文件变小损坏恢复

    相机SD卡文件变小损坏打不开 今天解决了一例不常见的数据问题,一张SD卡,里面有200多个MP4文件,佳能5D4单反相机拍摄的婚礼跟拍视频,苹果电脑拷贝中途出错,重新插上后,前后文件都没坏,就中间有8 ...

  7. 电脑端如何访问手机SD卡中的文件

    看到标题,估计各位看官有点懵,访问SD卡中的文件,你连上数据线不就行了,或者说你想要获取一些数据,你用及时通讯(微信,钉钉,QQ等等),在线传输不就行了,这些都可以的啊,有什么难的吗?哎,各位小老弟, ...

  8. Android 读取SD卡中文件以及内存使用情况

    android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,例如通过实例化一个StatFs对象 new StatFs(path.getPath())把SD卡根目录 ...

  9. android 音乐播放器 获取sd卡所有音乐文件,Android Studio音乐播放器无法读取SD卡,只有内部存储器...

    我很抱歉,如果这原来是一个愚蠢的问题,它可能会成为一个快速修复,但我只是无法弄清楚.我在android studio中创建了音乐播放器,并且没有任何sdcard上的歌曲不会显示在列表视图中,只有内部内 ...

最新文章

  1. UI设计培训:UI设计师离不开的基本版式设计
  2. Android开发--初探SQLiteDataBase/数据库的创建,更新,插入,查询
  3. IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
  4. [转载]oracle的表导入导出,表空间,用户名
  5. [css] 说说你对line-height是如何理解的?
  6. beautifulsoup_BeautifulSoup爬虫了解一下
  7. Python 问题 unindent does not match any outer indentation level 在 pycharm 平台的解决方法
  8. 复盘Spring中定时任务和异步线程池
  9. 只需两步手把手教你玩转图像识别
  10. 连微信红包都在催我们长大:90后首次成为红包主力军
  11. Netty框架多人聊天案例,代码示例
  12. java解惑--摘要
  13. 4g模块注册上网 移远_迅为干货 | Linux系统移远EC20 4G模块移植方法
  14. 卓凡信息技术考试系统服务器,卓凡信息技术考试系统
  15. MSP430 ADC12 最高采样率测试
  16. 安卓游戏广告加速插件_这是一个你值得拥有的安卓小插件.....
  17. 蓝桥杯刷题,第四界省赛B组
  18. 前端项目如何使用svg矢量图
  19. 百度网盘怎么批量转存到阿里云盘
  20. 运放的输入共模区间及解决VICMR问题

热门文章

  1. linux启动dm数据库,DM数据库的启停以及数据库状态检查
  2. matlab 微分方程组参数拟合,Matlab 微分方程组参数拟合求助!
  3. android笔记listview item加载动画
  4. STM32F103ZET6 — WWDG
  5. 硬盘容量单位有哪些?
  6. mysql 存储用户头像_node+vue用户头像处理上传并保存
  7. 一键抠图:一款简单好用的图片处理软件(工具详资源)
  8. 1553B总线通信概述
  9. Spring-Boot +Neo4j+实现节点的创建和关系的添加【玩转neo4j】
  10. prezi1破解安装与使用