android 存储数据与文件
16lz
2021-01-23
Android提供了几种数据或文件的存储方式:
读写sdcard,SharedPreference,数据库
下面初步了解一下。
一.读写sdcard。
android中文件读写到sdcard与一般java思路一样,通过I/O流进行读写。下面直接代码:
添加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
public class SavecontentService {private Context context; public SavecontentService(Context context){ this.context=context; }//向sdcard中存储文件(filename为保存的文件名,content为保存在文件中的内容) public boolean saveContentToSdcard(String filename,String content){ boolean flag=false; FileOutputStream fileOutputStream=null; //获得存储卡所在路径 File file=new File(Environment.getExternalStorageDirectory(),filename); //判断sdcard是否可用 if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){ try {fileOutputStream=new FileOutputStream(file);fileOutputStream.write(content.getBytes());flag=true;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{if(fileOutputStream!=null){try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}} } return flag; }//从sdcard中获取文件 public String getContentFromSdcard(String filename){ FileInputStream fileInputStream=null; //缓存的流,和磁盘无关,不需要关闭 ByteArrayOutputStream outputStream=new ByteArrayOutputStream(); File file=new File(Environment.getExternalStorageDirectory(),filename); if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){ try {fileInputStream=new FileInputStream(file);int len=0;byte data[]=new byte[1024];while((len=fileInputStream.read(data))!=-1){outputStream.write(data,0, len);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{if(fileInputStream!=null){try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}} } return new String(outputStream.toByteArray()); }}
二.SharedPreference。
它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下:
public class MySharedPreference { private Context context; public MySharedPreference(Context context){ this.context=context; }//保存信息 public boolean saveContent(String username,String password){ boolean flag=false; SharedPreferences sharedPreference=context.getSharedPreferences("userinfo",Context.MODE_PRIVATE); //对数据进行编辑 SharedPreferences.Editor edit=sharedPreference.edit(); //获取编辑器 edit.putString("username", username); edit.putString("password",password); flag=edit.commit(); //将数据保存至存储介质 return flag; }//获取信息 public HashMap<String,Object> getConten(){ HashMap<String,Object> map=new HashMap<String, Object>(); //userinfo为文件的名称,名称不用带后缀,后缀会由Android自动加上 Context.MODE_PRIVATE为文件的操作模式 SharedPreferences sharedPreference=context.getSharedPreferences("userinfo",Context.MODE_PRIVATE); String uname=sharedPreference.getString("username",""); //获取不到则默认为空 String pwd=sharedPreference.getString("password",""); map.put("username",uname); map.put("password",pwd); return map; }}
三.操作数据库。
android提供的SQLite是一个很小的关系数据库。我们通常通过SQLiteOpenHelper这个辅助类来管理数据库的创建和版本。
所有继承SQLiteOpenHelper的类必须实现下面的构造函数:
public DatabaseHelper(Context context,String name,CursorFactory factory,int version)
context ——上下文对象。name—— 数据库名称。factory—— 数据库游标工厂。version—— 数据库版本
该类的方法:
getReadableDatabase() getWriteDatabase() 通过这两个方法创建或打开一个可以读写的数据库,返回SQLiteDatabase对象对数据库进行操作。
public class DbOpenHelper extends SQLiteOpenHelper{ private static String name="myDb.db"; //数据库名 private static int version=1; //数据库版本号 public DbOpenHelper(Context context ) {super(context, name, null, version);} //数据库创建时 第一次被调用,完成数据表的创建@Overridepublic void onCreate(SQLiteDatabase db) {//支持数据库类型,整形,字符串类型,日期类型,二进制的数据类型 String sql="create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))";db.execSQL(sql);} //升级数据库版本方法@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {String sql="alert table person add sex varchar(8)"; //向表中插入一个属性db.execSQL(sql);}}
对数据库操作的类:
SQLiteDatabase有对应的方法进行数据库才操作(参考API)
public class DbDemo{ DbOpenHelper helper=null; public DbDemo(Context context){ helper=new DbOpenHelper(context); }//增加数据public boolean addObject(String[] args) {boolean flag=false;SQLiteDatabase database=helper.getWritableDatabase();String sql="insert into person(name,address) values(?,?)";database.execSQL(sql,args);flag=true;database.close();return flag;}//删除数据public boolean deleteObject(String[] args) {boolean flag=false;SQLiteDatabase database=helper.getWritableDatabase();String sql="delete from person where id=?";database.execSQL(sql,args);flag=true;database.close();return flag;}//更新数据public boolean updateObject(String[] args) {boolean flag=false;SQLiteDatabase database=helper.getWritableDatabase();String sql="update person set name=?,address=?";database.execSQL(sql);flag=true;database.close();return flag;}//获取一条记录public Map<String, String> getObject(String[] args) {Map<String,String> map=new HashMap<String, String>();SQLiteDatabase database=helper.getReadableDatabase(); //获取数据库String sql="select * from person where id=?";Cursor cursor=database.rawQuery(sql, args); //获取游标while(cursor.moveToNext()){for(int i=0;i<cursor.getColumnCount();i++){ //获取列名String name=cursor.getColumnName(i); //获取该列对应的数据String value=cursor.getString(cursor.getColumnIndex(name));map.put(name, value);}}return map;}//获取一组数据public List<Map<String, String>> getlistObject(String[] args) {List<Map<String,String>> list=new ArrayList<Map<String,String>>();SQLiteDatabase database=helper.getReadableDatabase();String sql="select * from person";Cursor cursor=database.rawQuery(sql, args);while(cursor.moveToNext()){Map<String, String> map=new HashMap<String, String>();for(int i=0;i<cursor.getColumnCount();i++){String name=cursor.getColumnName(i);String value=cursor.getString(cursor.getColumnIndex(name));map.put(name, value);}list.add(map);}return list;}}
测试类:
public class MyTest extends AndroidTestCase{private final String TAG="MyTest"; public MyTest(){ } /* * 存储数据到数据库 */ public void creartDb(){ DbOpenHelper openhelper=new DbOpenHelper(getContext()); openhelper.getWritableDatabase(); } public void addobject(){ DbDemo service=new DbDemo(getContext()); String[] objects={"fb","湖南"}; boolean flag=service.addObject(objects); Log.i(TAG, "---->>"+flag); }}
更多相关文章
- Android读取JSON格式数据
- Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)
- Android Day03-SQLite数据库操作及ListView详解
- Android联系人数据库全解析-2.0以上
- android 实用sax 读取xml文件内容 附源码
- android遍历sd卡中的所有文件