android中的读写,Android中文件的读写

首先得获取文件读写的权限可以在AndroidManifest中进行获取文件读写实验

对于Android版本较高的手机需要动态获取权限 动态获取权限可以参考之前发布的一篇文章https://blog.csdn.net/wangzibai/article/details/83048046

其实Android中的读写文件和java中的唯一区别就是Android的文件路径可能较为不同

这里列出Android SD卡的文件路径:

private String DIR = Environment.getExternalStorageDirectory().getAbsolutePath();

后面可以加具体想读写的文件路径 如下:

private String FEED_DIR = Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCache/" + "FeedType.txt";

其实文件的读写属于耗时操作 可以在子线程中进行(网络访问或数据库查询属于耗时长的操作)

这里介绍一下Android自带的子线程AsyncTask

AsyncTask可以正确,方便地使用UI线程。此类允许您执行后台操作并在UI线程上发布结果,而无需操作线程和/或处理程序。

AsyncTask 允许对用户界面执行异步操作。 它会先阻塞工作线程中的操作,然后在 UI 线程中发布结果,而无需您亲自处理线程和/或处理程序。

要使用它,必须创建 AsyncTask 的子类并实现 doInBackground() 回调方法,该方法将在后台线程池中运行。 要更新 UI,应该实现 onPostExecute() 以传递 doInBackground() 返回的结果并在 UI 线程中运行,以便您安全地更新 UI。 稍后,您可以通过从 UI 线程调用 execute() 来运行任务。

使用:

public class getTask extends AsyncTask{

//todo:文件操作 通过文件进行数据的永久保存 首先检测文件是否存在不存在则创建初始化 存在则跳过直接取值

@Override

protected Boolean doInBackground(Void... params) {

try {

Thread.sleep(500);

//todo:创建文件以及从中取值

File feedTypeFile = new File(FEED_DIR);

//检测sd卡是否安装

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

Log.e("sd卡","存在");

//文件不存在

if(!feedTypeFile.exists()){

//先创建文件夹/目录

feedTypeFile.getParentFile().mkdirs();

//再创建新文件

feedTypeFile.createNewFile();

Log.e("feedTypeFile","创建成功");

//向文件中写入数据

FileOutputStream fos = new FileOutputStream(FEED_DIR);

//将要写入的数据转化为二进制数据

byte[] bytes = feedTypeString.getBytes();

//二进制数据写入文件中

fos.write(bytes);

//关闭文件输出流

fos.close();

}

}

//第一次才创建文件向文件写入数据 如果数据存在则从文件中读取数据

feedTypeList = fileUtil.readTextFile(FEED_DIR);

} catch (Exception e) {

e.printStackTrace();

}

return success;

}

@Override

protected void onPostExecute(Boolean b) {

super.onPostExecute(b);

//在此更改UI

}

}

具体的文件读写实例:

/**

* Description:

* Data:2018/10/12-15:28

* Author: satsuki

*/

public class FileUtil {

//从文件中取值通过split转换成List返回显示

public ListreadTextFile(String filePath){

ListfeedTypeList = new ArrayList<>();

String feedType;

String[] feedTypes;

//StringBuffer初始化

StringBuffer feedTypeStringBuffer=new StringBuffer();

// feedTypeStringBuffer.append("");

String lineTxt = null;

File file = new File(filePath);

//文件读写会产生异常所以要放在try catch中

try{

//判断文件存在

if(file.isFile()&&file.exists()){

Log.e("文件","存在");

//读取字节流 utf-8是字符编码方式 可以根据具体情况进行更改

InputStreamReader read = new InputStreamReader(new FileInputStream(file),"utf-8");

BufferedReader bufferedReader = new BufferedReader(read);

while ((lineTxt = bufferedReader.readLine())!=null){

feedTypeStringBuffer.append(lineTxt);

Log.e("读取的数据:",feedTypeStringBuffer.toString());

}

//通过split转换成list返回

feedType = feedTypeStringBuffer.toString();

feedTypes = feedType.split(" ");

for (String feed:feedTypes){

feedTypeList.add(feed);

}

read.close();

}

}catch (Exception e){

e.printStackTrace();

}

return feedTypeList;

}

public void writeTextFile(String filePath,ListfeedTypeList){

File file = new File(filePath);

String feedTypeString=null;

StringBuffer feedTypeStringBuffer=new StringBuffer();

// feedTypeStringBuffer.append("");

try {

//不存在则创建

if(!file.exists()){

file.getParentFile().mkdirs();

file.createNewFile();

Log.e("feedTypeFile","创建成功");

}

//从list转换成带空格的String

for(String feed:feedTypeList){

feedTypeStringBuffer.append(feed);

feedTypeStringBuffer.append(" ");

}

feedTypeString=feedTypeStringBuffer.toString();

/**

* java FileOutputStream写入文件时会覆盖原来内容么

* 看构造方法

* FileInputStream inOne=new FileInputStream(fileX);这种覆盖

* FileInputStream inOne=new FileInputStream(fileX,true);这种不覆盖

*/

//向文件中写入数据 这里采用覆盖写入方式

FileOutputStream fos = new FileOutputStream(filePath);

byte[] bytes = feedTypeString.getBytes();

fos.write(bytes);

fos.close();

}catch (Exception e){

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值