概述
实现效果:
1、判断在该目录下是否有一个printf.txt文件,没有则复制一个过去,有则显示内容
2、文件的内容:
3、手机读取并显示在TextView上
部分代码和前一篇读取raw的差不多,故不赘述了,直接上代码,详细见注释
package com.bm.readtxt0126;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
/*
参考资料:https://www.cnblogs.com/liqw/p/4014760.html
【Android 建立文件夹、生成文件并写入文本文件内容】
* */
public class MainActivity extends AppCompatActivity {
String filePath,fileName;
TextView textView;
InputStream inputStreamRawTxt;
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
textView.setText(msg.obj.toString());
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
initEvent();
}
private void initView(){
textView=findViewById(R.id.id_main_text);
}
private void initData(){
filePath=Environment.getExternalStorageDirectory().getAbsolutePath()
+"/Download/";
fileName="printf.txt";
inputStreamRawTxt =getResources().openRawResource(R.raw.printf);
}
private void initEvent(){
//判断是否有该文件夹,没有则创建一个,生成文件夹之后,再生成文件,不然会出错
makeDirectory(filePath);
//在线程中执行耗时操作
new Thread(new Runnable() {
@Override
public void run() {
//判断是否有该文件,没有则创建一个,并返回true
if (createNewFile(filePath,fileName)){
//返回true说明创建了新的文件,则写入预设内容,
//返回false,则说明文件已存在,不需要写入(也不会进入该判断)
//将输入流转换成字符串,写入文件
String rawTxtString=Stream2String(inputStreamRawTxt);
writeTxtToFile(rawTxtString,filePath,fileName);
}
//再将文件读取为字符串
String text=ReadTxtFromSDCard(fileName);
//显示出来
Message message=Message.obtain(handler);
message.obj=text;
handler.sendMessage(message);
}
}).start();
}
// 生成文件夹
public static void makeDirectory(String filePath) {
File file = null;
try {
file = new File(filePath);
if (!file.exists()) {
file.mkdir();
}
} catch (Exception e) {
Log.i("error:", e+"");
}
}
// 生成文件
public boolean createNewFile(String filePath, String fileName) {
File file = null;
try {
file = new File(filePath + fileName);
if (!file.exists()) {
file.createNewFile();
return true;
}else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
// 将字符串写入到文本文件中
public void writeTxtToFile(String stringContent,
String filePath, String fileName) {
String strFilePath = filePath+fileName;
// 每次写入时,都换行写
String strContent = stringContent + "rn";
File file = new File(strFilePath);
try {
RandomAccessFile raf = new RandomAccessFile(file, "rwd");
raf.seek(file.length());
raf.write(strContent.getBytes());
raf.close();
} catch (Exception e) {
Log.e("TestFile", "Error on write File:" + e);
}
}
private String Stream2String(InputStream is) {
//强制缓存大小为16KB,一般Java类默认为8KB
BufferedReader reader = new BufferedReader(
new InputStreamReader(is), 16*1024);
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) { //处理换行符
sb.append(line + "n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
//这是这篇的重点,按ctrl+f关注input的操作
private String ReadTxtFromSDCard(String filename){
StringBuilder sb = new StringBuilder("");
//判断是否有读取权限
if(Environment.getExternalStorageState().
equals(Environment.MEDIA_MOUNTED)){
//打开文件输入流
try {
FileInputStream input = new FileInputStream(filePath + filename);
byte[] temp = new byte[1024];
int len = 0;
//读取文件内容:
while ((len = input.read(temp)) > 0) {
sb.append(new String(temp, 0, len));
}
//关闭输入流
input.close();
} catch (java.io.IOException e) {
Log.e("ReadTxtFromSDCard","ReadTxtFromSDCard");
e.printStackTrace();
}
}
return sb.toString();
}
}
最后
以上就是靓丽白开水为你收集整理的【Android】从手机存储读取内容并显示在TextView上的全部内容,希望文章能够帮你解决【Android】从手机存储读取内容并显示在TextView上所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复