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

编程入门 行业动态 更新时间:2024-10-14 00:31:11

android中的读写,Android中<a href=https://www.elefans.com/category/jswz/34/1771438.html style=文件的读写"/>

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

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

对于Android版本较高的手机需要动态获取权限 动态获取权限可以参考之前发布的一篇文章

其实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();

}

}

}

更多推荐

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

本文发布于:2024-03-05 19:43:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1713230.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件   android   Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!