一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

21、從頭學(xué)Android之Android的數(shù)據(jù)存儲(chǔ)

 CEO悟飯 2016-01-01
    

上一節(jié)我們學(xué)習(xí)了Android的數(shù)據(jù)存儲(chǔ)采用File,但是這樣的數(shù)據(jù)是存儲(chǔ)在應(yīng)用程序內(nèi)的,那么也就是說這樣的存儲(chǔ)的文件大小還是有一定要限制的,有時(shí)候我們需要存儲(chǔ)更大的文件,比如電影等,這就用到了我們的SDSard存儲(chǔ)卡。Android也為我們提供了SDCard的一些相關(guān)操作。Environment這個(gè)類就可以實(shí)現(xiàn)這個(gè)功能。

Environmet類

常用常量

String MEDIA_MOUNTED

當(dāng)前Android的外部存儲(chǔ)器可讀可寫

String MEDIA_MOUNTED_READ_ONLY

當(dāng)前Android的外部存儲(chǔ)器只讀

 

常用方法

方法名稱

描述

public static File getDataDirectory ()

獲得Android下的data文件夾的目錄

public static File getDownloadCacheDirectory ()

獲得Android Download/Cache 內(nèi)容的目錄

public static File getExternalStorageDirectory ()

獲得Android外部存儲(chǔ)器也就是SDCard的目錄

public static String getExternalStorageState ()

獲得Android外部存儲(chǔ)器的當(dāng)前狀態(tài)

public static File getRootDirectory ()

獲得Android下的root文件夾的目錄

 

要想實(shí)現(xiàn)對(duì)SDCard的讀取操作,只需要按以下幾個(gè)步驟就行:

1、  先判斷這臺(tái)手機(jī)設(shè)備上是否有SDCard且具有讀寫SDCard的權(quán)限

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

2、  調(diào)用Environment.getExternalStorageDirectory()獲得到外部存儲(chǔ)器的目錄

3、  使用IO流對(duì)外部存儲(chǔ)器進(jìn)行文件的讀寫

4、  別忘記了要在AndroidMainfest.xml中添加權(quán)限哦

特別聲明:以下操作必須要在如下權(quán)限下完成:

  1. <!-- 在SDCard中創(chuàng)建與刪除文件權(quán)限 -->  
  2.   
  3. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
  4.   
  5. <!-- 往SDCard中寫入數(shù)據(jù)權(quán)限 -->  
  6.   
  7. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  


實(shí)例:讀寫SDCard上的文件

  1. package com.jiahui.sdcarddemo;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6. import java.io.FileOutputStream;  
  7. import java.io.IOException;  
  8. import java.io.InputStream;  
  9. import java.io.OutputStream;  
  10. import java.io.RandomAccessFile;  
  11.   
  12. import android.app.Activity;  
  13. import android.os.Bundle;  
  14. import android.os.Environment;  
  15. import android.view.View;  
  16. import android.widget.Button;  
  17. import android.widget.EditText;  
  18. import android.widget.TextView;  
  19.   
  20. public class SDCardDemoActivity extends Activity {  
  21.   
  22.     private Button btnWrite, btnRead;  
  23.     private EditText edtContent;  
  24.     private TextView tvResult;  
  25.     private static final String FILE_NAME = "test.txt";  
  26.   
  27.     public void onCreate(Bundle savedInstanceState) {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.main);  
  30.         edtContent = (EditText) this.findViewById(R.id.edtContent);  
  31.         tvResult = (TextView) this.findViewById(R.id.tvResult);  
  32.   
  33.         btnRead = (Button) this.findViewById(R.id.btnRead);  
  34.         btnWrite = (Button) this.findViewById(R.id.btnWrite);  
  35.         btnWrite.setOnClickListener(new View.OnClickListener() {  
  36.             @Override  
  37.             public void onClick(View v) {  
  38.                 System.out.println("往SDCard里寫數(shù)據(jù)");  
  39.                 // 先判斷是否有SDCard  
  40.                 System.out.println("Environment.getExternalStorageState():"  
  41.                         + Environment.getExternalStorageState());  
  42.                 System.out.println("Environment.MEDIA_MOUNTED:"  
  43.                         + Environment.MEDIA_MOUNTED);  
  44.                 if (Environment.getExternalStorageState().equals(  
  45.                         Environment.MEDIA_MOUNTED)) {  
  46.   
  47.                     String content = edtContent.getText().toString();  
  48.   
  49.                     try {  
  50.   
  51.                         // 獲取SDcard路徑  
  52.                         File sdCardDir = Environment  
  53.                                 .getExternalStorageDirectory();  
  54.   
  55.                         // SDCard目錄:/mnt/sdcard  
  56.                         String sdcardPath = sdCardDir.getAbsolutePath();  
  57.                         System.out.println("sdCardDir.getAbsolutePath()"  
  58.                                 + sdCardDir.getAbsolutePath());  
  59.   
  60.                         File file = new File(sdCardDir, FILE_NAME);  
  61.                         // File file = new File(sdcardPath  
  62.                         // + File.separator + FILE_NAME);  
  63.                         // 以指定文件創(chuàng)建RandomAccessFile對(duì)象  
  64.                         RandomAccessFile raf = new RandomAccessFile(file, "rw");  
  65.                         // 將文件記錄指針移動(dòng)最后  
  66.                         raf.seek(file.length());  
  67.                         // 輸出文件內(nèi)容  
  68.                         raf.write(content.getBytes());  
  69.                         raf.close();  
  70.   
  71.                     } catch (Exception e) {  
  72.                         // TODO: handle exception  
  73.                     }  
  74.                 }  
  75.             }  
  76.         });  
  77.         btnRead.setOnClickListener(new View.OnClickListener() {  
  78.   
  79.             @Override  
  80.             public void onClick(View v) {  
  81.   
  82.                 if (Environment.getExternalStorageState().equals(  
  83.                         Environment.MEDIA_MOUNTED)) {  
  84.                     // 獲取SDcard路徑  
  85.   
  86.                     StringBuilder sb = new StringBuilder();  
  87.                     try {  
  88.                         File sdCardDir = Environment  
  89.                                 .getExternalStorageDirectory();  
  90.                         File file = new File(sdCardDir, FILE_NAME);  
  91.   
  92.                         InputStream inputStream = new FileInputStream(file);  
  93.                         int len = 0;  
  94.                         byte[] buffer = new byte[1024];  
  95.                         while ((len = inputStream.read(buffer)) != -1) {  
  96.   
  97.                             sb.append(new String(buffer, 0, len));  
  98.                         }  
  99.                         tvResult.setText(sb.toString());  
  100.                         // 關(guān)閉流  
  101.                         inputStream.close();  
  102.   
  103.                     } catch (Exception e) {  
  104.                         // TODO Auto-generated catch block  
  105.                         e.printStackTrace();  
  106.                     }  
  107.                 }  
  108.   
  109.             }  
  110.         });  
  111.   
  112.     }  
  113. }  


 

實(shí)現(xiàn)效果

用File Explorer可以看到如下圖一樣的效果:

開發(fā)注意事項(xiàng):

1、  一定不能忘記添加權(quán)限

  1. <!-- 在SDCard中創(chuàng)建與刪除文件權(quán)限 -->  
  2.   
  3. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />  
  4.   
  5. <!-- 往SDCard中寫入數(shù)據(jù)權(quán)限 -->  
  6.   
  7. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

 

2、  要判斷一下是否插入SD卡和是否具有讀寫的能力:

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

 

如需轉(zhuǎn)載引用請(qǐng)注明出處:http://blog.csdn.net/jiahui524

源代碼下載:http://download.csdn.net/download/jiahui524/3799819

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    好吊日成人免费视频公开| 国内精品一区二区欧美| 熟女中文字幕一区二区三区| 激情丁香激情五月婷婷| 精品人妻av区波多野结依| 欧美日韩综合综合久久久| 国产又黄又爽又粗视频在线| 欧美一区二区三区在线播放| 在线观看欧美视频一区| 日本一二三区不卡免费| 欧美不雅视频午夜福利| 91久久国产福利自产拍| 久久精品一区二区少妇| 欧美同性视频免费观看| 久久国内午夜福利直播| 久久天堂夜夜一本婷婷| 国产精品偷拍一区二区| 中文字幕人妻日本一区二区| 欧美不卡午夜中文字幕| 亚洲午夜av久久久精品| 日韩女优精品一区二区三区| 欧美在线观看视频免费不卡| 日本人妻中出在线观看| 国产一区欧美一区二区| 国产一区二区久久综合| 91欧美日韩中在线视频| 国产偷拍精品在线视频| 国产精品国三级国产专不卡| 偷拍洗澡一区二区三区| 精品国产91亚洲一区二区三区| 久久天堂夜夜一本婷婷| 麻豆印象传媒在线观看| 日韩成人免费性生活视频| 日韩精品福利在线观看| 国产免费一区二区三区av大片| 加勒比东京热拍拍一区二区| 丰满人妻一二三区av| 精品女同一区二区三区| 久久精品蜜桃一区二区av| 午夜福利激情性生活免费视频| 五月婷日韩中文字幕四虎|