Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách đọc file text đơn giản trong Android App bằng Kotlin

Giới thiệu

Hướng dẫn này trình bày cách đọc nội dung từ một file text nằm trong thư mục res/raw và hiển thị lên TextView trong ứng dụng Android sử dụng Kotlin.

Các bước thực hiện

Bước 1: Tạo dự án mới

Tạo project mới trong Android Studio qua File → New Project.

Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="70dp"
        android:onClick="readTextFile"
        android:text="Read Text File" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Read text File in Android"
        android:textAlignment="center"
        android:textColor="@android:color/background_dark"
        android:textSize="18sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/button"
        android:layout_marginTop="10dp"
        android:textSize="20sp"
        android:textStyle="bold" />

</RelativeLayout>

Bước 3: Tạo file text trong res/raw

  1. Chuột phải vào thư mục res → New → Android Resource Directory
  2. Chọn Resource type: raw, đặt tên thư mục là raw
  3. Chuột phải vào thư mục raw → New → File, đặt tên sample.txt
  4. Thêm nội dung mẫu vào file này

Bước 4: Xử lý logic (src/MainActivity.kt)

import android.os.Bundle
import android.view.View
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import java.io.BufferedReader
import java.io.IOException
import java.io.InputStream
import java.io.InputStreamReader

class MainActivity : AppCompatActivity() {
    private lateinit var textView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"
        textView = findViewById(R.id.textView)
    }

    fun readTextFile(view: View) {
        val stringBuilder = StringBuilder()
        val inputStream: InputStream = resources.openRawResource(R.raw.sample)
        val reader = BufferedReader(InputStreamReader(inputStream))

        try {
            var line: String?
            while (reader.readLine().also { line = it } != null) {
                stringBuilder.append(line).append("\n")
            }
            textView.text = stringBuilder.toString()
            Toast.makeText(baseContext, stringBuilder.toString(), Toast.LENGTH_LONG).show()
        } catch (e: IOException) {
            e.printStackTrace()
        } finally {
            try {
                inputStream.close()
            } catch (e: IOException) {
                e.printStackTrace()
            }
        }
    }
}

Bước 5: Cấu hình Manifest (androidManifest.xml)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.q11">

    <application
        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">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. Khi nhấn nút "Read Text File", nội dung file sample.txt sẽ được đọc và hiển thị trên TextView cũng như Toast.

Cải tiến khuyến nghị

Code gốc có lỗi logic trong vòng lặp while (gán textView.text bên trong vòng lặp). Phiên bản trên đã sửa lại: đọc toàn bộ file trước, sau đó gán một lần duy nhất. Ngoài ra, nên sử dụng use extension function của Kotlin để tự động đóng stream:

fun readTextFile(view: View) {
    resources.openRawResource(R.raw.sample).bufferedReader().use { reader ->
        val content = reader.readText()
        textView.text = content
        Toast.makeText(baseContext, content, Toast.LENGTH_LONG).show()
    }
}