如何在Android中读取SD卡上的文本文件?
简介
在Android应用程序中,我们经常需要下载特定文件并将其存储到设备的外部存储中。有时我们需要从设备的外部存储访问这些文件,并在我们的Android应用程序中显示这些文件的内容。本文将介绍如何在Android中读取SD卡上的文本文件。
实现
我们将创建一个简单的应用程序,其中我们将显示两个TextView。在第一个TextView中,我们将显示应用程序的标题,在第二个TextView中,我们将显示要从存储在外部存储中的文件中读取的消息。
步骤1:在Android Studio中创建一个新项目
导航到Android Studio,如下面的屏幕截图所示。在下面的屏幕截图中,点击“新建项目”以创建一个新的Android Studio项目。
点击“新建项目”后,您将看到下面的屏幕。
在此屏幕中,我们只需选择“空活动”并点击“下一步”。点击“下一步”后,您将看到下面的屏幕。
在此屏幕中,我们只需指定项目名称。然后包名将自动生成。
注意 - 确保选择Java作为语言。
指定所有详细信息后,点击“完成”以创建一个新的Android Studio项目。
项目创建完成后,我们将看到两个打开的文件,即activity_main.xml和MainActivity.java文件。
步骤2:使用activity_main.xml。
导航到activity_main.xml。如果此文件不可见,要打开此文件,请在左侧窗格中导航到app>res>layout>activity_main.xml以打开此文件。打开此文件后,将以下代码添加到其中。代码中添加了注释以详细了解。
语法
<?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="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" tools:context=".MainActivity"> <!-- on below line creating a text view for displaying a heading--> <TextView android:id="@+id/idTVHeading" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@id/idTVMsg" android:layout_margin="10dp" android:padding="4dp" android:text="How to read a text file from the SD card in Android?" android:textAlignment="center" android:textColor="@color/black" android:textSize="20sp" android:textStyle="bold" /> <!-- on below line creating a text view for displaying a message from our file--> <TextView android:id="@+id/idTVMsg" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="Message" android:textAlignment="center" android:textColor="@color/black" android:textSize="18sp" /> </RelativeLayout>
解释 - 在上面的代码中,根元素是Android中的RelativeLayout。此布局是一个ViewGroup,用于相对于彼此对齐其中的所有元素。我们可以借助ID或位置在RelativeLayout中相对对齐所有元素。
在此RelativeLayout中,我们创建了两个TextView。在第一个TextView中,我们显示应用程序的标题,而在第二个TextView中,我们将显示来自外部存储中文件的内容。
最后,我们为RelativeLayout添加了一个结束标签,因为TextView和Button都包含在我们的RelativeLayout中。
步骤3:在AndroidManifest.xml文件中添加文件读取权限以从外部存储读取文件。
导航到app>manifests>AndroidManifest.xml文件,并在manifest标签中添加互联网权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
解释 - 因为我们从外部存储打开文件,所以必须在AndroidManifest.xml文件中提供读取外部存储的权限。
步骤4:使用MainActivity.java。
导航到MainActivity.java。如果此文件不可见,要打开此文件,请在左侧窗格中导航到app>java>您的应用程序的包名>MainActivity.kt以打开此文件。打开此文件后,将以下代码添加到其中。代码中添加了注释以详细了解。
package com.example.androidjavaapp; import androidx.appcompat.app.AppCompatActivity; import android.content.ContextWrapper; import android.os.Bundle; import android.os.Environment; import android.widget.TextView; import android.widget.Toast; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; public class MainActivity extends AppCompatActivity { // on below line creating a variables private TextView msgTV; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // on below line initializing web view with id. msgTV = findViewById(R.id.idTVMsg); // on below line creating a variable for context wrapper. ContextWrapper contextWrapper = new ContextWrapper(getApplicationContext()); // on below line creating a directory for file and specifying the file name. File directory = contextWrapper.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); File txtFile = new File(directory, "file" + ".txt"); // on below line creating a string builder. StringBuilder text = new StringBuilder(); try { // on below line creating and initializing buffer reader. BufferedReader br = new BufferedReader(new FileReader(txtFile)); // on below line creating a string variable/ String line; // on below line setting the data to text while ((line = br.readLine()) != null) { text.append(line); text.append('
'); } br.close(); // on below line handling the exception } catch (Exception e) { Toast.makeText(getApplicationContext(), "Fail to read the file..", Toast.LENGTH_SHORT).show(); } // on the below line setting data to our text view. msgTV.setText(text); } }
解释 - 在上面MainActivity.java文件的代码中。首先,我们为TextView创建一个变量。
现在我们将看到onCreate方法。这是每个Android应用程序的默认方法。当创建应用程序视图时,将调用此方法。在此方法内部,我们设置内容视图,即名为activity_main.xml的布局文件,以从该文件中设置UI。
指定视图后,我们使用我们在activity_main.xml文件中指定的唯一ID初始化名为msgTV的TextView变量。
初始化TextView后,我们为要从中读取文件的文件创建一个变量,并将文件名指定为file.txt。请确保根据存储在设备中的文件更改文件名。然后,我们创建一个StringBuilder,用于从该文件中读取数据。
最后,我们通过调用setText方法将从文件中读取的内容设置到msgTV中。
添加上述代码后,我们只需点击顶栏中的绿色图标即可在移动设备上运行我们的应用程序。
注意 - 确保已连接到您的真实设备或模拟器。
输出
结论
在上面的教程中,我们学习了如何读取存储在外部存储中的文本文件中的数据。