如何从Android的SD卡读取文本文件?
我是Android开发新手。
我需要从SD卡读取文本文件并显示该文本文件。 有没有什么办法直接在Android中查看文本文件,或者我怎样才能读取和显示文本文件的内容?
在你的布局中,你需要一些东西来显示文本。 TextView
是一个明显的select。 所以你会有这样的东西:
<TextView android:id="@+id/text_view" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
而你的代码将如下所示:
//Find the directory for the SD Card using the API //*Don't* hardcode "/sdcard" File sdcard = Environment.getExternalStorageDirectory(); //Get the text file File file = new File(sdcard,"file.txt"); //Read text from file StringBuilder text = new StringBuilder(); try { BufferedReader br = new BufferedReader(new FileReader(file)); String line; while ((line = br.readLine()) != null) { text.append(line); text.append('\n'); } br.close(); } catch (IOException e) { //You'll need to add proper error handling here } //Find the view by its id TextView tv = (TextView)findViewById(R.id.text_view); //Set the text tv.setText(text);
这可以在你的Activity
的onCreate()
方法中,或者在其他地方进行,具体取决于你想要做什么。
回应
不要硬编码/ SD卡/
有时我们必须硬编码,因为在某些手机型号中API方法返回内部手机内存。
已知types:HTC One X和三星S3。
Environment.getExternalStorageDirectory()。getAbsolutePath()给出了不同的path – Android
package com.example.readfilefromexternalresource; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import android.app.Activity; import android.app.ActionBar; import android.app.Fragment; import android.os.Bundle; import android.os.Environment; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import android.os.Build; public class MainActivity extends Activity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); textView = (TextView)findViewById(R.id.textView); String state = Environment.getExternalStorageState(); if (!(state.equals(Environment.MEDIA_MOUNTED))) { Toast.makeText(this, "There is no any sd card", Toast.LENGTH_LONG).show(); } else { BufferedReader reader = null; try { Toast.makeText(this, "Sd card available", Toast.LENGTH_LONG).show(); File file = Environment.getExternalStorageDirectory(); File textFile = new File(file.getAbsolutePath()+File.separator + "chapter.xml"); reader = new BufferedReader(new FileReader(textFile)); StringBuilder textBuilder = new StringBuilder(); String line; while((line = reader.readLine()) != null) { textBuilder.append(line); textBuilder.append("\n"); } textView.setText(textBuilder); } catch (FileNotFoundException e) { // TODO: handle exception e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ if(reader != null){ try { reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } }
BufferedReader br = null; try { String fpath = Environment.getExternalStorageDirectory() + <your file name>; try { br = new BufferedReader(new FileReader(fpath)); } catch (FileNotFoundException e1) { e1.printStackTrace(); } String line = ""; while ((line = br.readLine()) != null) { //Do something here }
注意:有些手机有2个SD卡,一个内置固定卡和一个可移动卡。 你可以通过一个标准的应用程序find最后一个的名字:“Mijn Bestanden”(英文:“MyFiles”?)当我打开这个应用程序(项目:所有文件)打开文件夹的path是“/ sdcard”向下滚动有一个条目“external-sd”,点击这个打开文件夹“/ sdcard / external_sd /”。 假设我想打开一个文本文件“MyBooks.txt”,我将使用如下的东西:
String Filename = "/mnt/sdcard/external_sd/MyBooks.txt" ; File file = new File(fname);...etc...