最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開(kāi)發(fā)之?dāng)?shù)據(jù)的存儲(chǔ)方式詳解

 更新時(shí)間:2016年11月30日 08:27:48   作者:易小怪獸_iKing  
本篇文章主要介紹了Android開(kāi)發(fā)之?dāng)?shù)據(jù)的存儲(chǔ)方式,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

在Android中,數(shù)據(jù)的存儲(chǔ)分為兩種方式:

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

2、以json格式存儲(chǔ)在數(shù)據(jù)庫(kù)中

將數(shù)據(jù)以文件的存儲(chǔ)又分為兩種方式:

1、生成.txt文件

2、生成xml文件

那么今天就來(lái)詳細(xì)的說(shuō)一下以文件的形式存儲(chǔ),由于沒(méi)有講到數(shù)據(jù)庫(kù),在之后的課程中會(huì)講到j(luò)son格式存儲(chǔ)在數(shù)據(jù)庫(kù)中。

一、生成.txt文件

文件的生成無(wú)非就是我們Java中學(xué)習(xí)的輸入輸出流中的一部分,有Java基礎(chǔ)相信都是很容易理解的,因?yàn)樗娴暮芎?jiǎn)單啦~~

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

1)本機(jī)

2)SD卡

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

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

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

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

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

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

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

2、第2-4格:表示當(dāng)前用戶擁有的權(quán)限

3、第5-7格:表示當(dāng)前用戶所在組擁有的權(quán)限

4、第8-10格:表示其他用戶擁有的權(quán)限

5、"r":表示可讀;"w":表示可寫;"x":表示可執(zhí)行;"-":表示什么權(quán)限也沒(méi)有,如果看到"rwx"就表示可讀可寫可執(zhí)行,其他組合亦是如此

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

那么下面就詳細(xì)的來(lái)說(shuō)一下這幾種方式

1、如圖所示,當(dāng)我們點(diǎn)擊button按鈕時(shí)觸發(fā)文件的監(jiān)聽(tīng),這里的按鈕就是簡(jiǎn)單的按鈕,但是要記得設(shè)置onclick點(diǎn)擊事件的屬性哦~大家都不傻是吧…………

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

//點(diǎn)擊按鈕1,使用MODE_PRIVATE模式,生成一個(gè)私有的文件
  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模式,生成一個(gè)appent文件

//點(diǎn)擊按鈕2,使用MODE_PRIVATE模式,生成一個(gè)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模式,生成一個(gè)readable文件

//點(diǎn)擊按鈕3,使用MODE_WORLD_READABLE模式,生成一個(gè)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模式,生成一個(gè)writeable文件

 //點(diǎn)擊按鈕4,使用MODE_WORLD_WRITEABLE模式,生成一個(gè)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();
    }
  }

部分代碼說(shuō)明

FileOutputStream: 文件輸出流

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

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

 close():關(guān)閉流對(duì)象

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

MODE_WORLD_WRITEABLE,MODE_WORLD_READABLE:這兩個(gè)模式已經(jīng)被廢棄了……沒(méi)有那么多為什么!哈哈哈……

感覺(jué)自己萌萌噠……實(shí)在不會(huì)的就復(fù)習(xí)Java基礎(chǔ)吧!

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

2、將文件存儲(chǔ)在SD卡

1、獲取SD卡的路徑:

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

2、添加路徑

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

然后將路徑寫成這個(gè)就好了!就是這么簡(jiǎn)單

3、讀取剛才寫入的文件

在讀取文件內(nèi)容的時(shí)候,你寫入的路徑是什么,那么讀的時(shí)候路徑就是什么

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、路徑優(yōu)化

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

1、獲取路徑:

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

2、添加路徑:

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

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

二、生成xml文件

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

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

2、使用Android封裝好的XmlPullParser類

兩種方式生成的xml文件是一樣的,但是個(gè)人比較喜歡第二種方式,因?yàn)楹?jiǎn)單,就是簡(jiǎn)單,簡(jiǎn)單到Google工程師在開(kāi)發(fā)文檔中都不用寫實(shí)例代碼……

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

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

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

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

//點(diǎn)擊按鈕button1,通過(guò)StringBuffer的方式生成一個(gè)xml文件
  public void click1(View v){
    //1創(chuàng)建一個(gè)StringBuffer對(duì)象
    StringBuffer sb = new StringBuffer();
    
    //開(kāi)始組拼xml文件頭
    sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
    //開(kāi)始組拼xml根節(jié)點(diǎn)
    sb.append("<smss>");
    //開(kāi)始組拼sms節(jié)點(diǎn)以及子節(jié)點(diǎn)
    for (Sms sms : smsLists) {
      sb.append("<sms>");
      
      //組拼addressa節(jié)點(diǎn)
      sb.append("<address>");
      sb.append(sms.getAddress());
      sb.append("</address>");
      
      //組拼body節(jié)點(diǎn)
      sb.append("<body>");
      sb.append(sms.getBody());
      sb.append("</body>");
      
      //組拼date節(jié)點(diǎn)
      sb.append("<date>");
      sb.append(sms.getDate());
      sb.append("</date>");
      
      sb.append("</sms>");
    }
    
    //smss節(jié)點(diǎn)結(jié)束
    sb.append("</smss>");
    
    //把數(shù)據(jù)保存到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類

//點(diǎn)擊按鈕button2,通過(guò)XmlSerializer的方式生成xml文件
  public void click2(View v){
    try {
      //獲取XmlSerializer類的實(shí)例 通過(guò)xml這個(gè)工具類去獲取
      XmlSerializer serializer = Xml.newSerializer();
      //設(shè)置XmlSerializer序列化參數(shù)
      File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
      FileOutputStream fos = new FileOutputStream(file);
      serializer.setOutput(fos,"utf-8");
      //開(kāi)始寫xml文檔開(kāi)頭
      serializer.startDocument("utf-8", true);
      //寫xml的根節(jié)點(diǎn)   namespace 命名空間
      serializer.startTag(null, "smss");
      //遍歷sms節(jié)點(diǎn)以及子節(jié)點(diǎn)
      for (Sms sms : smsLists) {
        serializer.startTag(null, "sms");
        
        //組拼addressa節(jié)點(diǎn)
        serializer.startTag(null, "address");
        serializer.text(sms.getAddress());
        serializer.endTag(null, "address");
        
        //組拼body節(jié)點(diǎn)
        serializer.startTag(null, "body");
        serializer.text(sms.getBody());
        serializer.endTag(null, "body");
        
        //組拼date節(jié)點(diǎn)
        serializer.startTag(null, "date");
        serializer.text(sms.getDate());
        serializer.endTag(null, "date");
        
        serializer.endTag(null, "sms");
      }
      serializer.endTag(null, "smss");
      
      //結(jié)束xml結(jié)尾
      serializer.endDocument();
      //關(guān)閉流
      fos.close();
      
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

那么這里就生成如下圖的xml文件:

3、讀取xml文件中的數(shù)據(jù)

@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    try {
      //顯示數(shù)據(jù)信息
      TextView tv_sms = (TextView) findViewById(R.id.tv_weather);
      //通過(guò)上下文 獲取資產(chǎn)的管理者
      InputStream in = getAssets().open("smss.xml");
      //調(diào)用我們定義 解析xml的業(yè)務(wù)方法
      List<Sms> smsLists = SmsParser.xmlParser(in);
      
      StringBuffer sb = new StringBuffer();
      for (Sms sms : smsLists) {
        sb.append(sms.toString());
      }
      
      //把數(shù)據(jù)顯示到TextView上
      tv_sms.setText(sb.toString());
      
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

部分代碼說(shuō)明:

這里我想教大家自己怎么去看開(kāi)發(fā)文檔……所以大家自己去看開(kāi)發(fā)文檔吧……哈哈哈~~

ps:這里我想說(shuō)明一下,不是我不會(huì),也不是偷懶,而是大家在以后企業(yè)開(kāi)發(fā)的時(shí)候都是可以查看開(kāi)發(fā)文檔的,而且說(shuō)實(shí)話Android中的東西真的很多很多,要全部記住那簡(jiǎn)直太難啦……

所以希望大家都能夠自己學(xué)會(huì)查看開(kāi)發(fā)文檔……這也算是自己必修的一門課吧~~因?yàn)閷?duì)于小白的我,學(xué)會(huì)了看文檔就免得很多很多的麻煩,比如突然有一個(gè)東東不會(huì)……怎么辦?哈哈哈……

三、總結(jié)     

1、生成.txt文件的4種方法和步驟

2、生成xml文件的2種方法和步驟

3、讀取.txt文件

4、讀取xml文件

5、將數(shù)據(jù)存放在本機(jī)和SD卡中

6、學(xué)會(huì)看開(kāi)發(fā)文檔

7、文件權(quán)限

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

鄱阳县| 定兴县| 阿拉尔市| 高邮市| 依安县| 公安县| 连江县| 江门市| 萨嘎县| 岳普湖县| 聂拉木县| 台湾省| 迁安市| 岳池县| 郧西县| 江永县| 尚志市| 万荣县| 城口县| 巴东县| 泰来县| 策勒县| 新郑市| 迁西县| 方城县| 新疆| 卢氏县| 乐亭县| 黄陵县| 西平县| 徐水县| 滕州市| 吴忠市| 鹿邑县| 重庆市| 七台河市| 当雄县| 盱眙县| 邵阳市| 安宁市| 西乌珠穆沁旗|