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();
}