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);
}
//数据库创建时 第一次被调用,完成数据表的创建
@Override
public void onCreate(SQLiteDatabase db) {
//支持数据库类型,整形,字符串类型,日期类型,二进制的数据类型
String sql="create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))";
db.execSQL(sql);
}
//升级数据库版本方法
@Override
public 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视频开发源码和ppt--android存储数据和文件.rar"这个压缩包提供的是关于Android数据存储和文件操作的教学资源,包括视频课程和PPT讲义,由知名的Android讲师罗升阳(老罗)编撰。 首先,我们来看一下...
"Android存储字符串数据到txt文件" Android存储字符串数据到txt文件是Android开发中的一种常见需求,对于大多数开发者来说,存储字符串数据到txt文件是一种非常有用的功能。今天,我们将详细介绍如何在Android中...
在Android应用开发中,本地数据存储是至关重要的一个环节,特别是在处理用户数据或者应用程序需要持久化数据时。本文将深入探讨Android系统中的文件存储机制,包括如何读取、写入、重写和删除.txt格式的文件。理解...
本教程将详细介绍Android中的三种主要数据存储方式:SharedPreferences存储、内部文件存储以及数据库存储。 1. SharedPreferences存储 SharedPreferences是Android提供的一种轻量级的数据存储方式,用于保存应用...
Android 平台中实现数据存储的五种方式分别是:使用 SharedPreferences 存储数据、文件存储数据、SQLite 数据库存储数据、使用 ContentProvider 存储数据和网络存储数据。 使用 SharedPreferences 存储数据 ...
在Android开发中,数据存储与访问是至关重要的环节,它涉及到应用程序如何持久化用户数据、配置信息以及应用程序内部状态。本教程将深入探讨Android中的几种主要数据存储方式,包括Shared Preferences、SQLite数据库...
在Android系统中,传统的文件存储方式通常需要应用获取相应的文件读写权限,以便在外部存储(如SD卡)上保存和访问数据。然而,随着Android系统的更新,特别是自Android 6.0(Marshmallow)引入运行时权限管理以来,...
总结起来,Android文件存储涉及多种策略,根据数据类型、访问需求和安全性选择合适的存储方式。理解并熟练掌握这些技术对于开发高效、稳定的应用至关重要。在实际开发中,还需要注意数据备份、权限管理和文件清理等...
本案例是关于如何使用Android的数据存储机制,特别是文件内部存储,来创建一个简单的备忘录应用程序。以下是这个案例涉及到的关键知识点: 1. **数据存储方式**: - Android提供了多种数据存储方式,如...
在Android系统中,数据存储是应用程序管理用户数据的关键部分。Android提供了多种数据存储方式,以适应不同的需求,如轻量级的数据保存、持久化的数据存储等。以下将详细阐述Android数据存储的相关知识点。 1. ...
在Android开发中,数据库是存储和管理应用数据的重要手段,而SQLite是最常用的关系型数据库系统。本教程将指导你如何将Excel数据导入到Android应用的SQLite数据库.db文件中,以便在应用运行时能够访问和操作这些数据...
在 Android 中,有多种数据存储方式,包括 SharedPreferences、内部文件存储、SD 卡存储和 SQLite 数据库存储等。本文将详细介绍 Android 中的数据存储方式,特别是 SQLite 数据库存储。 一、SharedPreferences ...
在Android系统中,数据访问与存储是开发过程中不可或缺的一部分,它涉及到应用程序的数据持久化、用户数据的保存以及数据的安全管理。本章节将深入探讨Android中常见的数据存储方式,包括内部存储、外部存储、SQLite...
在Android开发中,有时我们需要将应用中的数据导出到Excel文件,以便用户可以方便地查看、编辑或分享。本文将详细介绍如何在Android中实现这一功能,主要涉及的技术点包括文件操作、数据序列化以及第三方库的使用。 ...
在Android系统中,文件管理是应用程序开发者必须掌握的重要技能之一,尤其是在处理用户数据,如图片文件时。本文将深入探讨Android的分区存储机制,并详细讲解如何修改和删除图片文件。 一、Android分区存储概述 ...
在Android应用开发中,有时我们需要从本地存储的JSON文件中读取数据,这通常涉及到文件I/O操作和字符编码处理。以下将详细讲解如何在Android中读取本地JSON文件,并解决可能出现的显示乱码问题。 1. **读取本地JSON...
在Android平台上,对TXT文件进行保存和读取是常见的数据持久化操作,尤其适用于存储少量结构化的文本数据。本文将详细讲解如何在Android应用中实现TXT文件的保存和读取功能,以及涉及到的相关知识点。 首先,我们...
本主题将深入探讨“Android数据储存”,特别是针对非图片数据的处理,如将JSON数据序列化为对象,并存储到内存或文件系统中,以减少不必要的网络通信。 一、Android数据存储方式 1. SharedPreferences:适用于存储...
Android提供了对文件系统的访问权限,开发者可以直接操作文件来存储数据。文件存储可以分为内部存储和外部存储。内部存储的数据对于应用是私有的,只有应用本身可以访问;外部存储则允许其他应用访问,通常用于存储...
在Android开发中,文件的保存与读取是数据持久化的基础操作,涉及到的知识点主要包含以下几个方面: 1. Android文件系统结构:Android系统中,每个应用运行在独立的沙盒中,拥有自己私有的文件系统目录。应用的私有...