我是Android开发的新手。
我需要从SD卡读取文本文件并显示该文本文件。 有没有办法直接在Android中查看文本文件,或者如何阅读和显示文本文件的内容?
答案 0 :(得分:120)
In your layout您需要显示文字的内容。 TextView
是显而易见的选择。所以你会有这样的事情:
<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);
这可以采用您onCreate()
的{{1}}方法或其他地方,具体取决于您想要做什么。
答案 1 :(得分:6)
回应
不要硬编码/ sdcard /
有时我们必须对其进行硬编码,因为在某些手机型号中,API方法会返回内部手机内存。
已知类型:HTC One X和Samsung S3。
Environment.getExternalStorageDirectory().getAbsolutePath() gives a different path - Android
答案 2 :(得分:2)
您应该具有READ_EXTERNAL_STORAGE权限才能读取sdcard。 在manifest.xml中添加权限
#include <cstdint>
static const int MSG_SIZE = 256;
static const int MSG_SIZE_IN_BYTES = MSG_SIZE/8;
std::bitset<MSG_SIZE> msg = ...;
uint8_t msg_in_bits[MSG_SIZE_IN_BYTES] = {0};
for (int i = 0; i < MSG_SIZE; ++i)
if (msg[i])
msg_in_bits[i/8] |= 1 << (i%8);
MPI_Send(msg_in_bits, MSG_SIZE_IN_BYTES, MPI_BYTE, 1, 0, MPI_COMM_WORLD);
从android 6.0或更高版本开始,您的应用必须要求用户在运行时授予危险权限。请参考此链接 Permissions overview
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
答案 3 :(得分:1)
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();
}
}
}
}
}
}
答案 4 :(得分:1)
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
}
答案 5 :(得分:1)
注意:有些手机有2个sdcards,一个内置固定卡和一个可移动卡。 您可以通过标准应用找到最后一个的名称:&#34; Mijn Bestanden&#34; (英文:&#34; MyFiles&#34;?) 当我打开这个应用程序(项目:所有文件)时,打开文件夹的路径是&#34; / sdcard&#34; ,向下滚动有一个条目&#34; external-sd&#34; ,单击此按钮将打开文件夹&#34; / sdcard / external_sd /&#34; 。 假设我要打开一个文本文件&#34; MyBooks.txt&#34;我会用一些东西:
String Filename = "/mnt/sdcard/external_sd/MyBooks.txt" ;
File file = new File(fname);...etc...