First of all, create an Activity in your project that will have a layout similar to below. You will need;
- Three buttons tp check, save and read external storage.
- One TextView to display results.

activity_external_storage.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ExternalStorageActivity">
<Button
android:text="Check External Storage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnCheckExternal"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="50dp" />
<Button
android:text="Save External Storage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnSaveExternal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="24dp"
app:layout_constraintTop_toBottomOf="@+id/btnCheckExternal" />
<Button
android:text="Read External Storage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnReadExternal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="32dp"
app:layout_constraintTop_toBottomOf="@+id/btnSaveExternal" />
<TextView
android:text=""
android:layout_width="250dp"
android:layout_height="200dp"
android:id="@+id/resultView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="200dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
ExternalStorageActivity.kt
package com.androidatc.lesson9
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Environment
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_external_storage.*
import java.io.*
class ExternalStorageActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_external_storage)
val filepath = "MyFileStorage"
var myExternalFile: File? = null
var filename = "mytestfile"
btnCheckExternal.setOnClickListener {
val state = Environment.getExternalStorageState()
if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(
state
)
) {
Toast.makeText(this, "External storage is available to read", Toast.LENGTH_SHORT)
.show()
} else {
Toast.makeText(
this,
"External storage is not available to read",
Toast.LENGTH_SHORT
).show()
}
}
btnSaveExternal.setOnClickListener {
myExternalFile = File(getExternalFilesDir(filepath), filename)
Toast.makeText(applicationContext, myExternalFile.toString(), Toast.LENGTH_SHORT).show()
try {
val fileOutPutStream = FileOutputStream(myExternalFile)
fileOutPutStream.write("This is just a test".toByteArray())
fileOutPutStream.close()
Toast.makeText(applicationContext, "data save", Toast.LENGTH_SHORT).show()
} catch (e: IOException) {
e.printStackTrace()
}
}
btnReadExternal.setOnClickListener {
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()
resultView.setText(stringBuilder.toString())
}
}
}
}
View the file created in storage directory

Double-click to download and view the content of mytestfile.

The contents of the file will also be displayed on the textview.
