Android-解析/生成xml、文件读写、数据库操作

一.文件读写
1.写出到SD卡:需要注册权限   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
获取SD卡路径使用Environment.getExternalStorageDirectory()方法, 该方法获取的路径可以兼容所有Andorid版本
我们可以使用File类的getTotalSpace()和getFreeSpace()来获取SD卡空间信息, 注意: 这两个方法是在JDK6以后才提供, 对应的Android版本是9以上
获取SD卡状态: Environment.getExternalStorageState(), 如果状态是Environment.MEDIA_MOUNTED即为可用
    • File file = new File(Environment.getExternalStorageDirectory(), etfile);
    • OutputStream out = new FileOutputStream(file);
    • out.write(etcontent.getBytes());
    • out.close();
    • System.out.println("总大小:" + (int)file.getTotalSpace());
    • System.out.println("剩余空间:" + (int)file.getFreeSpace());
2.读取SD卡文件
使用FileInputStream指定目录之后即可读取, SD卡文件是公共的, 所有程序都可读, 不用任何权限.
3.写出到手机
输出流使用Context类的openFileOutput()方法打开, 可以指定文件的模式. MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, MODE_APPEND   
  • FileOutputStream out = context.openFileOutput(fileName, Context.MODE_PRIVATE);
  • out.write(etcontent.getBytes());
  • out.close();
4.读取手机文件
如果是当前应用创建的文件, 可读可写.
如果是读其他应用创建的文件, 需要考虑权限.
二.操作XML
1.解析 *****
获取解析器: Xml.newPullParser()
设置输入流: setInput(InputStream  in)
获取当前事件类型: getEventType()
解析下一个事件, 获取类型: next()
获取标签名: getName()
获取属性值: getAttributeValue()
获取下一个文本: nextText() 
获取当前文本: getText() 
5种事件类型: START_DOCUMENT, END_DOCUMENT, START_TAG, END_TAG, TEXT
  •     
  • parse.setInput(inputStream, "UTF-8");
  • for (int type = parse.getEventType(); type != XmlPullParser.END_DOCUMENT; type = parse.next()) {
  •       if (type == XmlPullParser.START_TAG) {
  •    if ("person".equals(parse.getName())) {
  • p = new Person();
  • String id = parse.getAttributeValue(0);// 第一个属性
  • p.setId(Integer.parseInt(id));
  • persons.add(p);
  • } else if ("name".equals(parse.getName())) {
  • String name = parse.nextText();
  • p.setName(name);
  • } else if ("age".equals(parse.getName())) {
  • String age = parse.nextText();
  • p.setAge(Integer.parseInt(age));
  • }
  • }
2.生成 *
获取生成工具: Xml.newSerializer()
设置输出流: setOutput(OutputStream out,"UTF-8")
开始文档: startDocument("UTF-8", true)
结束文档: endDocument()
开始标签: startTag()
结束标签: endTag()
属性: attribute()
文本: text()    
  • XmlSerializer xs = Xml.newSerializer();
  • try {
  • xs.setOutput(out, "UTF-8");
  • xs.startDocument("UTF-8", true);
  • xs.startTag(null, "persons");
  • for (Person p : persons) {
  • xs.startTag(null, "person");
  • xs.attribute(null, "id", p.getId() + "");

  • xs.startTag(null, "name");
  • xs.text(p.getName());
  • xs.endTag(null, "name");

  • xs.startTag(null, "age");
  • xs.text(p.getAge() + "");
  • xs.endTag(null, "age");

  • xs.endTag(null, "person");
  • }
  • xs.endTag(null, "persons");
  • xs.endDocument();
三.SharedPreferences,记住密码
1.存储
获取对象: getSharedPreferences("")
获取编辑器: sp.edit();
存储: putString("",""), putInt(), putBoolean()
提交修改: commit()
2.读取
获取对象: getSharedPreferences()
获取数据: getString(), getInt(), getBoolean()
四.SQLite数据库 *** 
1.SQLite的特点
除了主键之外所有列都不区分数据类型
每个库是一个单独的文件
手机自带数据库, 使用代码创建库, 创建表
2.创建数据库
定义类继承 SQLiteOpenHelper
调用父类构造函数(4个参数), 注意:  版本号从1开始
重写onCreate()和onUpgrade()方法
当调用getWriteableDatabase()或者getReadableDatabase()的时候, 根据数据库是否存在以及版本号区别调用onCreate()和onUpgrade()
3.增删改查  
增删改都是使用当调用getWriteableDatabase()获取SQLiteDatabase对象, 然后调用 execSQL()方法执行一个SQL语句
查询方法是调用getReadableDatabase()获取对象, 调用 rawQuery()方法执行SQL语句得到一个Cursor对象
调用moveToNext()方法判断是否包含下一个元素
调用getString(), getInt()等方法获取数据
如果需要根据列名获取, 需要先使用getColumnIndex()方法获取指定列的索引
4.另一种增删改查
insert(): 传入表名和要插入的数据, 返回插入的id. 第二个参数随便写一个列的名字即可, 用来在ContentValues为空的时候使用, 避免出现SQL异常
delete(): 传入表名和条件执行删除, 返回删除了几行.
update()传入表名和要修改的数据以及条件, 返回更新了几行.
query() 传入要查询的表名, 列名, 条件, 参数, 分组, 分组条件, 排序, 分页
5.事务管理
beginTransaction() 开启事务
setTransactionSuccessful() 设置事务成功标记(可以设置多个)
endTransaction() 结束事务(把最后一个成功标记之前的操作提交)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值