个性化阅读
专注于IT技术分析

Kotlin Android读写内部存储

本文概述

Android Internal Storage是我们存储文件的设备内存。默认情况下, 存储在内部存储器中的文件是私有文件, 只有同一应用程序可以访问该文件。无法从应用程序外部访问它们。

为了从文件读取数据或将数据写入文件, Android分别提供了openFileInput()和openFileOutput()方法。

当用户从设备上卸载其应用程序时, 其内部存储文件也将被删除。

写入内部存储中的文件

为了将文件写入设备的内部存储中, java.io包提供了openFileOutput()方法, 该方法返回FileOutputStream类的实例。要将数据写入文件, 请调用FileOutputStream .write()方法。

val file:String = fileName.text.toString()
val data:String = fileData.text.toString()
val fileOutputStream:FileOutputStream
try {
    fileOutputStream = openFileOutput(file, Context.MODE_PRIVATE)
    fileOutputStream.write(data.toByteArray())
}catch (e: Exception){
    e.printStackTrace()
}

从内部存储读取文件内容

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

var fileInputStream: FileInputStream? = null
fileInputStream = openFileInput(filename)
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)
}
//Displaying data on EditText
fileData.setText(stringBuilder.toString()).toString()

Kotlin Android读写内部存储示例

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

activity_main.xml

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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.srcmini02.com.kotlininternalstoragereadwrite.MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="31dp"
        android:layout_marginStart="31dp"
        android:layout_marginTop="117dp"
        android:text="File Name"
        android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"/>

    <EditText
        android:id="@+id/editFile"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView"
        android:layout_alignBottom="@+id/textView"
        android:layout_alignLeft="@+id/btnSave"
        android:layout_alignStart="@+id/btnSave"
        android:layout_marginLeft="31dp"
        android:layout_marginStart="31dp"
        android:ems="10"
        android:paddingLeft="10dp"
        android:inputType="textPersonName"
        android:hint="file name" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignEnd="@+id/textView"
        android:layout_alignRight="@+id/textView"
        android:layout_below="@+id/textView"
        android:layout_marginTop="67dp"
        android:text="File Data"
        android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"/>

    <EditText
        android:id="@+id/editData"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textView2"
        android:layout_alignBottom="@+id/textView2"
        android:layout_alignLeft="@+id/editFile"
        android:layout_alignStart="@+id/editFile"
        android:ems="10"
        android:lines="5"
        android:hint="data" />

    <Button
        android:id="@+id/btnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_alignParentBottom="true"
        android:layout_alignStart="@+id/textView2"
        android:layout_marginBottom="53dp"
        android:layout_marginLeft="49dp"
        android:layout_marginStart="49dp"
        android:text="Save" />

    <Button
        android:id="@+id/btnView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignEnd="@+id/editData"
        android:layout_alignRight="@+id/editData"
        android:layout_alignTop="@+id/btnSave"
        android:layout_marginEnd="33dp"
        android:layout_marginRight="33dp"
        android:text="View" />
</RelativeLayout>

MainActivity.kt

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

package example.srcmini02.com.kotlininternalstoragereadwrite

import android.content.Context
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 java.io.*


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val fileName = findViewById<EditText>(R.id.editFile)
        val fileData = findViewById<EditText>(R.id.editData)

        val btnSave = findViewById<Button>(R.id.btnSave)
        val btnView = findViewById<Button>(R.id.btnView)

        btnSave.setOnClickListener(View.OnClickListener {
            val file:String = fileName.text.toString()
            val data:String = fileData.text.toString()
            val fileOutputStream:FileOutputStream
            try {
                fileOutputStream = openFileOutput(file, Context.MODE_PRIVATE)
                fileOutputStream.write(data.toByteArray())
            } catch (e: FileNotFoundException){
                e.printStackTrace()
            }catch (e: NumberFormatException){
                e.printStackTrace()
            }catch (e: IOException){
                e.printStackTrace()
            }catch (e: Exception){
                e.printStackTrace()
            }
            Toast.makeText(applicationContext, "data save", Toast.LENGTH_LONG).show()
            fileName.text.clear()
            fileData.text.clear()
        })

        btnView.setOnClickListener(View.OnClickListener {
                val filename = fileName.text.toString()
                if(filename.toString()!=null && filename.toString().trim()!=""){
                   var fileInputStream: FileInputStream? = null
                   fileInputStream = openFileInput(filename)
                   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)
                   }
                   //Displaying data on EditText
                   fileData.setText(stringBuilder.toString()).toString()
               }else{
                   Toast.makeText(applicationContext, "file name cannot be blank", Toast.LENGTH_LONG).show()
               }
        })

    }
}

输出:

Kotlin Android读写内部存储
Kotlin Android读写内部存储
Kotlin Android读写内部存储
Kotlin Android读写内部存储
Kotlin Android读写内部存储
赞(0)
未经允许不得转载:srcmini » Kotlin Android读写内部存储

评论 抢沙发

评论前必须登录!