📜  Kotlin Android读写外部存储

📅  最后修改于: 2021-01-05 08:38:55             🧑  作者: Mango

Kotlin Android读写外部存储

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用于保存和查看文件内容。





    

    

    

    

    

MainActivity.kt

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

package example.javatpoint.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

AndroidManifest.xml



    
    
    
        
            
                

                
            
        
    


输出: