Android四種文件存儲

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();提交數據對象

image

image

讀取:

sp.getStirng(「key」,」」)/sp.getBoolean(「key」,」」);空內容爲「 」,也能夠設置默認值「這是一個默認值」;

image

第二種文件存儲: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);

image

3,初步瞭解幾種文件訪問的模式 分別是:

openFileOutput("文件名","文件的訪問模式"); 私有 只讀 只寫 可讀可寫

image

 

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()便可;


image

小程序:

image

image

image

image

第三種存儲方式:SQlite

數據庫是一種能夠存儲固定格式的文件,而SQlite是一種輕量級的數據庫,其建立丶存儲和修改的過程是:

1,建立一個打開數據庫的幫助類;

image

ps:幫助類中只是幫咱們建立一個表格,數據庫的升級只能由低到高;

image

2,//執行下面的一行代碼,數據庫是不會別建立的了。
        MyDbOpenHelper helper = new MyDbOpenHelper(this);
        //若是想建立數據庫必須執行,下一行代碼
        helper.getWritableDatabase();

      image

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

image

    第一:添加數據:

/**
     * 添加一條數據
     */
    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();
        }
    }

image

第二:修改數據

/**
     * 刪除一條數據
     */
    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();
            // 再去查詢一次。
        }
    }

image

第三:刪除數據

/**
     * 修改一條數據
     */
    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();
        }
    }

image

第四:查詢數據

/**
     * 查詢所有數據
     */
    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();
    }

image

相關文章
相關標籤/搜索