Android有四种文件存储方式,分别是sharepreference,file,SQlite(数据库),内容提供者;sql
第二种文件存储,咱们先来了解下sharepreference:数据库
简单理解,它是一种简单方便体量小的数据存储方式,一般用于存储程序的配置信息,好比控件勾选状态,登陆信息;自身并不能编辑数据,只能经过他的对象editor进行编辑;小程序
他的使用步骤是:api
存储:dom
1,在主类中定义类成员变量shareprefence sp;编辑器
2,在主方法中初始化sp,sp=getSharePrefence;this
3,获取编辑器,Editor editor =sp.edit();.net
4,editor.putString(“key”,”name”)/putBoolean(“key”,”false”)orm
5, editor.commit();提交数据对象
读取:
sp.getStirng(“key”,””)/sp.getBoolean(“key”,””);空内容为“ ”,也能够设置默认值“这是一个默认值”;
第二种文件存储:file
1,文件存储有两种方式,一种是储存在软件自己的目录下:/data/data/包名/文件名;/data/cache/包名/文件名;对应的上下文API分别是:this.getFileDir和this.getCacheDir
2,相似方便的API还有:“openFileOutput”
FileOutputStream fos = openFileOutput("info.txt", MODE_PRIVATE);等同于
File file=new File(this.getFileDir(),"info.txt");
FileOutputStream fos=new FileOutputStream(file);
3,初步了解几种文件访问的模式 分别是:
openFileOutput("文件名","文件的访问模式"); 私有 只读 只写 可读可写
4,文件储存于SD卡
(A)重点认识:Environment. 是内存卡相关的方便API,提供内存卡的相关上下文信息,与全局的context不一样,范围更小;
/*
* 判断内存卡状态的方法是:
* 第一:Environment.getExternalStorageState()返回内存卡状态信息,返回值是String类型;
* 第二:拿到Environment.的上下文与返回值做比较便可;
*/
String state=Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
Toast.makeText(MainActivity.this, "内存卡可用"+"可用空间为"+info, 0).show();
}else{
Toast.makeText(MainActivity.this, "内存卡不可用", 0).show();
}
(B)了解formatter,而且知道如何判断外部存储大小
/*
*
*
* 获取内存存储大小方法以下:
* 第一:经过api拿到文件路径,建立文件
* 第二:经过file文件里面的getFreeSpace()方法获取可用空间
* 第三:拿到格式化器formatter对其格式化formatter.formatFileSize()便可;
小程序:
第三种存储方式:SQlite
数据库是一种能够存储固定格式的文件,而SQlite是一种轻量级的数据库,其建立丶存储和修改的过程是:
1,建立一个打开数据库的帮助类;
ps:帮助类中只是帮咱们建立一个表格,数据库的升级只能由低到高;
2,//执行下面的一行代码,数据库是不会别建立的了。
MyDbOpenHelper helper = new MyDbOpenHelper(this);
//若是想建立数据库必须执行,下一行代码
helper.getWritableDatabase();
3,数据库的增删改查,可经过API进行增删改查:ps》》》每一次对数据库的操做都须要执行如下代码
MyDBOpenHelper helper = new MyDBOpenHelper(this);
SQLiteDatabase db = helper.getWritableDatabase(); 因此,在db.dao包中,通常会建立有参构造方法,写入如下代码,提升代码复用性(1,提取公共参数;2,使用dao类时,要让“对象”每次都执行,只能经过有参构造方法):
public class StudentDao {
private StudentDBOpenHelper helper;
/**
* 没有无参的构造方法,只能用下面的构造方法去初始化dao
* @param context
*/
public StudentDao(Context context) {
helper = new StudentDBOpenHelper(context);
}第一:添加数据:
/**
* 添加一条数据
*/
public void add(View view) {
// 执行下面的一行代码,数据库是不会别建立的了。
MyDBOpenHelper helper = new MyDBOpenHelper(this);
// 若是想建立数据库必须执行,下一行代码
SQLiteDatabase db = helper.getWritableDatabase();
Random random = new Random();
// db.execSQL("insert into info (name,phone) values (?,?)", new Object[]
// {
// "王五" + random.nextInt(100), "110-" + random.nextInt(100) });
ContentValues values = new ContentValues();
values.put("name", "王五" + random.nextInt(100));
values.put("phone", "110-" + random.nextInt(100));
long id = db.insert("info", null, values);// 经过组拼sql语句
db.close();
if (id != -1) {
Toast.makeText(this, "添加成功,在第" + id + "行", 0).show();
} else {
Toast.makeText(this, "添加失败", 0).show();
}
}第二:修改数据
/**
* 删除一条数据
*/
public void delete(View view) {
// 执行下面的一行代码,数据库是不会别建立的了。
MyDBOpenHelper helper = new MyDBOpenHelper(this);
// 若是想建立数据库必须执行,下一行代码
SQLiteDatabase db = helper.getWritableDatabase();
// db.execSQL("delete from info ");
int result = db.delete("info", null, null);
db.close();
if (result == 0) {
Toast.makeText(this, "删除失败", 0).show();
} else {
Toast.makeText(this, "删除了"+result+"条记录", 0).show();
// 再去查询一次。
}
}第三:删除数据
/**
* 修改一条数据
*/
public void update(View view) {
// 执行下面的一行代码,数据库是不会别建立的了。
MyDBOpenHelper helper = new MyDBOpenHelper(this);
// 若是想建立数据库必须执行,下一行代码
SQLiteDatabase db = helper.getWritableDatabase();
//db.execSQL("update info set phone=?", new Object[] { "8888" });
ContentValues values = new ContentValues();
values.put("phone", "99999");
int result = db.update("info", values, null, null);
db.close();
if (result == 0) {
Toast.makeText(this, "修改了0条记录", 0).show();
} else {
Toast.makeText(this, "修改了"+result+"条记录", 0).show();
}
}第四:查询数据
/**
* 查询所有数据
*/
public void query(View view) {
// 执行下面的一行代码,数据库是不会别建立的了。
MyDBOpenHelper helper = new MyDBOpenHelper(this);
// 若是想建立数据库必须执行,下一行代码
SQLiteDatabase db = helper.getReadableDatabase();
//Cursor cursor = db.rawQuery("select * from info", null);
Cursor cursor = db.query("info", new String[]{"name","phone","_id"}, null, null, null, null, null);
while (cursor.moveToNext()) {
String name = cursor.getString(0);
String phone = cursor.getString(1);
String id = cursor.getString(2);
System.out.println("id:" + id + "--name:" + name + "--phone"
+ phone);
System.out.println("----");
}
// 记得用完数据库 关闭cursor
cursor.close();
db.close();
}