国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android開發之數據的存儲方式詳解

2019-12-12 04:28:19
字體:
來源:轉載
供稿:網友

在Android中,數據的存儲分為兩種方式:

1、直接以文件的形式存儲在目錄中

2、以json格式存儲在數據庫中

將數據以文件的存儲又分為兩種方式:

1、生成.txt文件

2、生成xml文件

那么今天就來詳細的說一下以文件的形式存儲,由于沒有講到數據庫,在之后的課程中會講到json格式存儲在數據庫中。

一、生成.txt文件

文件的生成無非就是我們Java中學習的輸入輸出流中的一部分,有Java基礎相信都是很容易理解的,因為它真的很簡單啦~~

1、生成目錄可以分為兩種:

1)本機

2)SD卡

2、生成.txt文件的方式又可以分為4種

1)使用MODE_PRIVATE模式,生成一個私有的文件

2)使用MODE_PRIVATE模式,生成一個appent文件

3)使用MODE_WORLD_READABLE模式,生成一個readable文件

4)使用MODE_WORLD_WRITEABLE模式,生成一個writeable文件

在生.txt文件之前,我們有必要先了解一下文件的權限,如下圖:

1、第一格:表示文件的類型

2、第2-4格:表示當前用戶擁有的權限

3、第5-7格:表示當前用戶所在組擁有的權限

4、第8-10格:表示其他用戶擁有的權限

5、"r":表示可讀;"w":表示可寫;"x":表示可執行;"-":表示什么權限也沒有,如果看到"rwx"就表示可讀可寫可執行,其他組合亦是如此

注意:不同的模式生成的文件的權限是不一樣的,以及生成文件的類型的權限也是不一樣的。

那么下面就詳細的來說一下這幾種方式

1、如圖所示,當我們點擊button按鈕時觸發文件的監聽,這里的按鈕就是簡單的按鈕,但是要記得設置onclick點擊事件的屬性哦~大家都不傻是吧…………

1)使用MODE_PRIVATE模式,生成一個私有的文件

//點擊按鈕1,使用MODE_PRIVATE模式,生成一個私有的文件  public void click1(View v){    try {      FileOutputStream fos = openFileOutput("private.txt", MODE_PRIVATE);      fos.write("private".getBytes());      fos.close();    } catch (Exception e) {      e.printStackTrace();    }  }

2)使用MODE_PRIVATE模式,生成一個appent文件

//點擊按鈕2,使用MODE_PRIVATE模式,生成一個appent文件  public void click2(View v){    try {      FileOutputStream fos = openFileOutput("appent.txt", MODE_PRIVATE);      fos.write("appent".getBytes());      fos.close();    } catch (Exception e) {      e.printStackTrace();    }  }

3)使用MODE_WORLD_READABLE模式,生成一個readable文件

//點擊按鈕3,使用MODE_WORLD_READABLE模式,生成一個readable文件  public void click3(View v){    try {      FileOutputStream fos = openFileOutput("readable.txt", MODE_WORLD_READABLE);      fos.write("readable".getBytes());      fos.close();    } catch (Exception e) {      e.printStackTrace();    }  }

4)使用MODE_WORLD_WRITEABLE模式,生成一個writeable文件

 //點擊按鈕4,使用MODE_WORLD_WRITEABLE模式,生成一個write文件  public void click4(View v){    try {      FileOutputStream fos = openFileOutput("writeable.txt", MODE_WORLD_WRITEABLE);      fos.write("writeable".getBytes());      fos.close();    } catch (Exception e) {      e.printStackTrace();    }  }

部分代碼說明

FileOutputStream: 文件輸出流

openFileOutput("private.txt", MODE_PRIVATE):openFileOutput是Android中封裝好的文件輸出流,private.txt就是生成的文件名,MODE_PRIVATE這個就是上面說到的模式啦!

fos.write("private".getBytes()):write就是寫入什么內容,這里的參數就是你要寫入的文本內容,getBytes()………………^_^不知道自己去看Java基礎吧哈哈哈~~~

 close():關閉流對象

try-catch:有異常,try一下……

MODE_WORLD_WRITEABLE,MODE_WORLD_READABLE:這兩個模式已經被廢棄了……沒有那么多為什么!哈哈哈……

感覺自己萌萌噠……實在不會的就復習Java基礎吧!

那么這里就生成了如下圖所示的4個文件

2、將文件存儲在SD卡

1、獲取SD卡的路徑:

String sdPath = Environment.getExternalStorageDirectory().getPath() ;

2、添加路徑

File file = new File(sdPath + "writeable.txt");

然后將路徑寫成這個就好了!就是這么簡單

3、讀取剛才寫入的文件

在讀取文件內容的時候,你寫入的路徑是什么,那么讀的時候路徑就是什么

try {      //File file = new File("/data/data/com.test.filereadwrite/files/readable.txt");      File file = new File("/data/data/com.test.filereadwrite/files/writeable.txt");      FileInputStream fis = new FileInputStream(file);      BufferedReader bffr = new BufferedReader(new InputStreamReader(fis));      String content = bffr.readLine();      Toast.makeText(MainActivity.this, content, 2000).show();    } catch (Exception e) {      e.printStackTrace();    }

4、路徑優化

大家偶發現了我這里是直接寫的路徑,那么這樣寫并不是最優化的,那么要怎么才是更優化的呢,那么久只要改兩行代碼就好啦,例如:

1、獲取路徑:

String path = Context.getFilesDir().getPath();

2、添加路徑:

File file = new File(path + "writeable.txt");

注意:我們寫的路徑都應該是用優化的這種方式,而不應該寫死,在這里我為了殺雞儆猴哈哈哈~所以就寫死了……但是效果都是一樣的哇~~

二、生成xml文件

生成xml文件又可以分為兩種方式:

1、使用原生StringBuffer拼接xml文件

2、使用Android封裝好的XmlPullParser類

兩種方式生成的xml文件是一樣的,但是個人比較喜歡第二種方式,因為簡單,就是簡單,簡單到Google工程師在開發文檔中都不用寫實例代碼……

在生成xml之前,大家先不要忘記了寫一個實體類,不然你怎么封裝數據?告訴我怎么封裝…………

那么我們這里就直接上代碼了(實體類自己寫……)

@Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);        //初始化我們要備份的數據    smsLists = new ArrayList<Sms>();        //插入測試數據    for (int i = 0; i < 10; i++) {      Sms sms = new Sms();      sms.setAddress("10086"+i);      sms.setBody("你好"+i);      sms.setDate("201"+i);      //把sms對象加入到集合中      smsLists.add(sms);    }  }

1、使用原生StringBuffer拼接xml文件

//點擊按鈕button1,通過StringBuffer的方式生成一個xml文件  public void click1(View v){    //1創建一個StringBuffer對象    StringBuffer sb = new StringBuffer();        //開始組拼xml文件頭    sb.append("<?xml version=/"1.0/" encoding=/"utf-8/"?>");    //開始組拼xml根節點    sb.append("<smss>");    //開始組拼sms節點以及子節點    for (Sms sms : smsLists) {      sb.append("<sms>");            //組拼addressa節點      sb.append("<address>");      sb.append(sms.getAddress());      sb.append("</address>");            //組拼body節點      sb.append("<body>");      sb.append(sms.getBody());      sb.append("</body>");            //組拼date節點      sb.append("<date>");      sb.append(sms.getDate());      sb.append("</date>");            sb.append("</sms>");    }        //smss節點結束    sb.append("</smss>");        //把數據保存到SD卡中    try {      File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");      FileOutputStream fos = new FileOutputStream(file);      fos.write(sb.toString().getBytes());      fos.close();    } catch (Exception e) {      e.printStackTrace();    }       }

2、使用Android封裝好的XmlPullParser類

//點擊按鈕button2,通過XmlSerializer的方式生成xml文件  public void click2(View v){    try {      //獲取XmlSerializer類的實例 通過xml這個工具類去獲取      XmlSerializer serializer = Xml.newSerializer();      //設置XmlSerializer序列化參數      File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");      FileOutputStream fos = new FileOutputStream(file);      serializer.setOutput(fos,"utf-8");      //開始寫xml文檔開頭      serializer.startDocument("utf-8", true);      //寫xml的根節點   namespace 命名空間      serializer.startTag(null, "smss");      //遍歷sms節點以及子節點      for (Sms sms : smsLists) {        serializer.startTag(null, "sms");                //組拼addressa節點        serializer.startTag(null, "address");        serializer.text(sms.getAddress());        serializer.endTag(null, "address");                //組拼body節點        serializer.startTag(null, "body");        serializer.text(sms.getBody());        serializer.endTag(null, "body");                //組拼date節點        serializer.startTag(null, "date");        serializer.text(sms.getDate());        serializer.endTag(null, "date");                serializer.endTag(null, "sms");      }      serializer.endTag(null, "smss");            //

主站蜘蛛池模板:
朝阳区|
榆中县|
济阳县|
瑞金市|
手游|
嘉义县|
沾化县|
梨树县|
辽宁省|
饶阳县|
禄劝|
枞阳县|
公主岭市|
武平县|
唐海县|
黄大仙区|
宽城|
仁寿县|
和硕县|
上饶市|
湟源县|
甘泉县|
拜泉县|
于田县|
老河口市|
双峰县|
灵石县|
吉林省|
厦门市|
修文县|
莱阳市|
昌黎县|
德钦县|
辰溪县|
泽州县|
祁阳县|
南部县|
贡觉县|
普格县|
和政县|
江源县|