1. 读写的第一种方式:
    使用最初始的IO方式读写到应用包目录下面
package com.example.login;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;public class UserUtils {/*** 保存用户名密码到本地文件中 位置放在app应用包下* @param username* @param passwd* @return*/public static boolean saveUserinfo(String username,String passwd){try {String info =  username +"##"+ passwd;File file = new File("/data/data/com.example.login/info.txt");FileOutputStream outputStream = new FileOutputStream(file);outputStream.write(info.getBytes());outputStream.close();return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 从app应用包路径下读取文件中信息* @return*/public static Map<String,String> readUserinfo(){try {Map map = new HashMap<String,String>();File file = new File("/data/data/com.example.login/info.txt");FileInputStream inputStream = new FileInputStream(file);BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));String info = bufferedReader.readLine();String[] userinfos = info.split("##");map.put("username", userinfos[0]);map.put("passwd", userinfos[1]);return map;} catch (Exception e) {e.printStackTrace();return null;}}
}

2,对版本一进行优化,使用Context上下文环境获取应用包路径进行获取文件路径以及使用新的API在SD卡上操作数据读写
     相关主要API:
     public abstract class Context extends Object
     public abstract File getFilesDir () //获取应用包路径
     public abstract FileOutputStream openFileOutput (String name, int mode) //在应用包中打开一个文件进行准备写入操作,如果文件不存在则进行创建。
     public abstract FileInputStream openFileInput (String name)//在应用包中打开一个文件进行读操作。不能有文件分隔符。
     public class  Environment extends Object
     public static File getExternalStorageDirectory () //获取存储卡目录位置
     public static String getExternalStorageState ()   //获取存储卡状态

package com.example.login;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;import android.content.Context;
import android.os.Environment;public class UserUtils4Context {/*** 使用上下文环境context API 获取文件目录位置* @param context* @param username* @param passwd* @return*/public static boolean saveUserinfo(Context context,String username,String passwd){try {String info =  username +"##"+ passwd;String path = context.getFilesDir().getPath();File file = new File(path,"info.txt");FileOutputStream outputStream = new FileOutputStream(file);outputStream.write(info.getBytes());outputStream.close();return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 从目录com.example.package/info.txt中读取文件信息* @param context* @return*/public static Map<String,String> readUserinfo(Context context){try {Map map = new HashMap<String,String>();String path = context.getFilesDir().getPath();File file = new File(path,"info.txt");FileInputStream inputStream = new FileInputStream(file);BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));String info = bufferedReader.readLine();String[] userinfos = info.split("##");map.put("username", userinfos[0]);map.put("passwd", userinfos[1]);return map;} catch (Exception e) {e.printStackTrace();return null;}}/*** 优化版 context.openFileOutput 此API会在应用包目录下面创建一个files文件夹 将文件保存在此文件夹中* data/data/com.example.package/files/contextinfo.txt* @param context* @param username* @param passwd* @return*/public static boolean saveUserinfo2(Context context,String username,String passwd){try {String info =  username +"##"+ passwd;FileOutputStream outputStream = context.openFileOutput("contextinfo.txt",0);outputStream.write(info.getBytes());outputStream.close();return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 优化版 从 data/data/com.example.package/files/contextinfo.txt中读取数据* @param context* @return*/public static Map<String,String> readUserinfo2(Context context){try {Map map = new HashMap<String,String>();FileInputStream inputStream = context.openFileInput("contextinfo.txt");BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));String info = bufferedReader.readLine();String[] userinfos = info.split("##");map.put("username", userinfos[0]);map.put("passwd", userinfos[1]);return map;} catch (Exception e) {e.printStackTrace();return null;}}/*** 通过使用 Environment API 将数据保存到sd卡* @param context* @param username* @param passwd* @return*/public static boolean saveUserinfo2sdCard(String username,String passwd){try {String info =  username +"##"+ passwd;String path = Environment.getExternalStorageDirectory().getPath();File file = new File(path,"sdcard.txt");FileOutputStream outputStream = new FileOutputStream(file);outputStream.write(info.getBytes());outputStream.close();return true;} catch (Exception e) {e.printStackTrace();return false;}}/*** 通过使用 Environment API 从sd卡上读取数据* @return*/public static Map<String,String> readUserinfoFromSdCard(){try {Map map = new HashMap<String,String>();File file = new File(Environment.getExternalStorageDirectory().getPath(),"sdcard.txt");FileInputStream inputStream = new FileInputStream(file);BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));String info = bufferedReader.readLine();String[] userinfos = info.split("##");map.put("username", userinfos[0]);map.put("passwd", userinfos[1]);return map;} catch (Exception e) {e.printStackTrace();return null;}}
}

3,使用SharedPreferences实现文件的读写
  主要操作步骤,写入:1,获取sp实例 2,获取编辑器;3,添加数据;4,提交数据。
                           读:    1,获取sp实例;2根据key获取value;

package com.example.login;import com.example.loginuseSp.R;import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends Activity {private EditText etUserName;private EditText etUserPasswd;private CheckBox cbIsRem;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);etUserName =  (EditText)findViewById(R.id.et_username);etUserPasswd =  (EditText)findViewById(R.id.et_userpasswd);cbIsRem =  (CheckBox)findViewById(R.id.cb_isrem);//获取实例SharedPreferences sp = getSharedPreferences("config", 0);String name = sp.getString("name","");String passwd = sp.getString("passwd","");Boolean isCk = sp.getBoolean("isCk",false);if(isCk){etUserName.setText(name);etUserPasswd.setText(passwd);cbIsRem.setChecked(true);}}public void loginClick(View v){String userName = etUserName.getText().toString().trim();String passWd = etUserPasswd.getText().toString().trim();if(TextUtils.isEmpty(userName)|| TextUtils.isEmpty(passWd)){Toast.makeText(MainActivity.this, "用户名密码不能为空", 1).show();}else{Toast.makeText(MainActivity.this, "登录成功", 1).show();CheckBox checkBox = (CheckBox)findViewById(R.id.cb_isrem);//获取实例SharedPreferences sp = getSharedPreferences("config", 0);//获取编辑器Editor edit = sp.edit();if(checkBox.isChecked()){boolean result = false;//存储数据edit.putString("name", userName);edit.putString("passwd", passWd);edit.putBoolean("isCk", true);if(result){Toast.makeText(MainActivity.this, "保存成功", 1).show();}else{Toast.makeText(MainActivity.this, "保存失败", 1).show();}}else{edit.putBoolean("isCk", false);}//提交数据edit.commit();}}
}

4,android 实现XML的 读写操作

package com.example.createxml;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Xml;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}/*** 模拟获取数据* @return*/private List<Sms> getList(){ArrayList<Sms> smss = new ArrayList<Sms>(); Sms sms = new Sms("10086","20180903","您的话费余额1209");Sms sms2 = new Sms("95599","20180803","您的银行卡余额1209000");Sms sms3 = new Sms("12306","20170813","您的购票成功");smss.add(sms);smss.add(sms2);smss.add(sms3);return smss;}public void readXML(View v){try {List<Sms> parserXml = parserXml(getAssets().open("fxml.xml"));TextView tv = (TextView)findViewById(R.id.tv_text);tv.setText(parserXml.toString());} catch (IOException e) {e.printStackTrace();}}/*** 创建一个XML文件点击事件* @param v*/public void createXML(View v){XmlSerializer serializer = Xml.newSerializer();File file = new File(Environment.getExternalStorageDirectory().getPath(),"fxml.xml");List<Sms> smsList = getList();try {FileOutputStream fos = new FileOutputStream(file);serializer.setOutput(fos, "utf-8");serializer.startDocument("utf-8", true);serializer.startTag(null, "smss");for (Sms sms : smsList) {serializer.startTag(null, "sms");serializer.attribute(null, "id", sms.getAddress());serializer.startTag(null, "address");serializer.text(sms.getAddress());serializer.endTag(null, "address");serializer.startTag(null, "date");serializer.text(sms.getDate());serializer.endTag(null, "date");serializer.startTag(null, "content");serializer.text(sms.getContent());serializer.endTag(null, "content");serializer.endTag(null, "sms");}serializer.endTag(null,"smss");serializer.endDocument();} catch (Exception e) {e.printStackTrace();}}/*** 解析xml* @param stream* @return*/public List<Sms> parserXml(InputStream stream){XmlPullParser pullParser = Xml.newPullParser();List<Sms> smsList = null;Sms sms = null;try {pullParser.setInput(stream,"utf-8");int eventType = pullParser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {case XmlPullParser.START_TAG:if("smss".equals(pullParser.getName())){smsList = new ArrayList<Sms>();}else if("sms".equals(pullParser.getName())){sms = new Sms();String id = pullParser.getAttributeValue(null, "id");sms.setId(id);}else if("address".equals(pullParser.getName())){sms.setAddress(pullParser.nextText());}else if("date".equals(pullParser.getName())){sms.setDate(pullParser.nextText());}else if("content".equals(pullParser.getName())){sms.setContent(pullParser.nextText());}break;case XmlPullParser.END_TAG:if("sms".equals(pullParser.getName())){smsList.add(sms);}break;default:break;}eventType = pullParser.next();}} catch (Exception e) {e.printStackTrace();}return smsList;}
}

Android 第二章 本地文件的读写相关推荐

  1. linux 设计一个程序,要求打开文件 pass 所有者,第二章 Linux 文件操作

    文档均来自网络,如有侵权请联系我删除文档 第二章 Linux 文件操作(4学时) 实验一文件属性和无缓冲I/O 实验目的 1.熟悉Linux文件系统属性控制 2.掌握不带缓存的文件I/O程序设计方法 ...

  2. 第一行代码Android第二章读书笔记

    第一行代码Android第二章读书笔记 Activity 1.1 手动创建活动 1.2 Toast和Menu/销毁活动 Intent 2.1 显示/隐式 2.2 传递/返回数据 活动的生命周期 3.1 ...

  3. Android中对手机文件进行读写

    参考张泽华视频 (一)读写手机内存卡中的文件 对手机中的文件进行读写操作,或者新增一个文件时,可直接使用openFileOutput  /  openFileInput 得到文件的输出.输入流. Fi ...

  4. Android实现打开本地文件,Android 打开本地文件(示例代码)

    Android 打开本地的文件,目前来说,其实很常见.而且现在有手机版的office了.查看office的全家桶就更加方便. 首先要知道的是,Android 打开本地文件是根据类型打开的,也就是根据文 ...

  5. linux C语言 对本地文件进行读写操作

    linux C语言 对本地文件进行最简单读写操作 读取json文件 保存json文件 读取json文件 对本地以cjson格式保存的文本进行读取 /* 读取json文件 */ const char* ...

  6. Python本地文件的读写

    我们在E盘根目录创建一个  <测试文件.txt>,编码方式为gb2312,如下 读取本地文件,注意mode的参数'r',编码格式一定要跟创建的时候一样. 以什么编码方式储存文件,就要以什么 ...

  7. android prebuild第三方so库,Android NDK编译本地文件以及引用第三方so文件

    在需要引入第三方的so文件的情况下,怎样使用NDK编译本地代码? 1.新建jni文件夹,将你要编译源码的文件以及需要引入的so文件复制到jni文件目录下 2.编写android.mk文件,首先将你的将 ...

  8. 《傻瓜计量经济学与stata应用》第二章do文件,记得把数据考到当前目录或带上路径,否则可能无法打开

    *==============================================================================* *================== ...

  9. 向Android模拟器导入本地文件

    利用adb工具 执行adb push 命令向模拟机中导入文件 adb push d:data/test.txt /adcard/data 如果是genymotion虚拟机 可以在virtubox中设置 ...

最新文章

  1. java 反射机制_Java反射机制原理探究
  2. Java Timer定时器 使用
  3. 程序猿充电的五本优质编程技术书
  4. SteamVR追踪技术有多火? 半数开发者来自非游戏行业
  5. 基于MaxCompute分布式Python能力的大规模数据科学分析
  6. mysql定时作业_mysql 让一个存储过程定时作业的代码(转)
  7. 惠斯通电桥信号调理芯片_elmos推出专为汽车应用开发的传感器信号调理芯片E520.47...
  8. Python爬虫要违法了吗?小编告诉大家:守住规则,大胆去爬
  9. leetcode 476. 数字的补数(Number Complement)
  10. Ubuntu登录异常: 输入正确的密码, 但是却无法进入系统, 总是返回到登录界面, 但是用ctrl+alt+F1-F文字界面登录都可以进入。
  11. 深度学习菜鸟的信仰地︱Supervessel超能云服务器、深度学习环境全配置
  12. 转 windows核心编程 学习笔记 目录
  13. 爬虫实例十 爬取百度贴吧小姐姐照片
  14. (转)“版本上线延时”问题与对策的探讨
  15. w3cschool php下载_w3cschool下载_W3Cschool v2.0离线版
  16. android 记步功能实现,Android计步(简单Demo)
  17. 2.应用统计与随机过程第二章部分课上例题(平稳随机、各态历经)
  18. 计算机无法登陆提示rpc服务器不可用,电脑rpc服务器不可用,教你电脑rpc服务器不可用怎么解决...
  19. 维基百科数据导入mysql数据库并进行检索操作
  20. 元图地图开放平台正式发布 --- 首款基于CAD图形的地图平台

热门文章

  1. 企业如何快速应对市场环境的不断变化
  2. 诗与远方:无题(五十四)- 曾经写给妹子的一首诗
  3. 分布式应用CAP理论
  4. Linux常用性能分析监控工具 iostat、iotop、top、htop、free、iftop
  5. linux下安装mysql_Linux下安装mysql-8.0.20的教程详解
  6. oracle11gr2架构图,Oracle 11g R2 体系结构
  7. 光纤收发器的原理及应用_基于砷化镓传感器的光纤测温原理及其在地铁中的应用...
  8. linux 25端口漏洞,一封突如其来的邮件443端口漏洞
  9. mysql hdfs_MySQL数据库与HDFS的实时数据同步
  10. 前端开发学习Day4