21、從頭學Android之Android的資料存放區–SD卡

來源:互聯網
上載者:User

 

上一節我們學習了Android的資料存放區採用File,但是這樣的資料是儲存在應用程式內的,那麼也就是說這樣的儲存的檔案大小還是有一定要限制的,有時候我們需要儲存更大的檔案,比如電影等,這就用到了我們的SDSard儲存卡。Android也為我們提供了SDCard的一些相關操作。Environment這個類就可以實現這個功能。

Environmet類

常用常量

String MEDIA_MOUNTED

當前Android的外部儲存空間可讀可寫

String MEDIA_MOUNTED_READ_ONLY

當前Android的外部儲存空間唯讀

 

常用方法

方法名稱

描述

public static File getDataDirectory ()

獲得Android下的data檔案夾的目錄

public static File getDownloadCacheDirectory ()

獲得Android Download/Cache 內容的目錄

public static File getExternalStorageDirectory ()

獲得Android外部儲存空間也就是SDCard的目錄

public static String getExternalStorageState ()

獲得Android外部儲存空間的目前狀態

public static File getRootDirectory ()

獲得Android下的root檔案夾的目錄

 

要想實現對SDCard的讀取操作,只需要按以下幾個步驟就行:

1、  先判斷這台手機裝置上是否有SDCard且具有讀寫SDCard的許可權

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

2、  調用Environment.getExternalStorageDirectory()獲得到外部儲存空間的目錄

3、  使用IO流對外部儲存空間進行檔案的讀寫

4、  別忘記了要在AndroidMainfest.xml中添加許可權哦

特別聲明:以下操作必須要在如下許可權下完成:

    <!-- 在SDCard中建立與刪除檔案許可權 -->    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />    <!-- 往SDCard中寫入資料許可權 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

執行個體:讀寫SDCard上的檔案

package com.jiahui.sdcarddemo;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.RandomAccessFile;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class SDCardDemoActivity extends Activity {private Button btnWrite, btnRead;private EditText edtContent;private TextView tvResult;private static final String FILE_NAME = "test.txt";public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);edtContent = (EditText) this.findViewById(R.id.edtContent);tvResult = (TextView) this.findViewById(R.id.tvResult);btnRead = (Button) this.findViewById(R.id.btnRead);btnWrite = (Button) this.findViewById(R.id.btnWrite);btnWrite.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {System.out.println("往SDCard裡寫資料");// 先判斷是否有SDCardSystem.out.println("Environment.getExternalStorageState():"+ Environment.getExternalStorageState());System.out.println("Environment.MEDIA_MOUNTED:"+ Environment.MEDIA_MOUNTED);if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {String content = edtContent.getText().toString();try {// 擷取SDcard路徑File sdCardDir = Environment.getExternalStorageDirectory();// SDCard目錄:/mnt/sdcardString sdcardPath = sdCardDir.getAbsolutePath();System.out.println("sdCardDir.getAbsolutePath()"+ sdCardDir.getAbsolutePath());File file = new File(sdCardDir, FILE_NAME);// File file = new File(sdcardPath// + File.separator + FILE_NAME);// 以指定檔案建立RandomAccessFile對象RandomAccessFile raf = new RandomAccessFile(file, "rw");// 將檔案記錄指標移動最後raf.seek(file.length());// 輸出檔案內容raf.write(content.getBytes());raf.close();} catch (Exception e) {// TODO: handle exception}}}});btnRead.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {// 擷取SDcard路徑StringBuilder sb = new StringBuilder();try {File sdCardDir = Environment.getExternalStorageDirectory();File file = new File(sdCardDir, FILE_NAME);InputStream inputStream = new FileInputStream(file);int len = 0;byte[] buffer = new byte[1024];while ((len = inputStream.read(buffer)) != -1) {sb.append(new String(buffer, 0, len));}tvResult.setText(sb.toString());// 關閉流inputStream.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}});}}

 

實現效果

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

開發注意事項:

1、  一定不能忘記添加許可權

    <!-- 在SDCard中建立與刪除檔案許可權 -->    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />    <!-- 往SDCard中寫入資料許可權 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

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

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

 

如需轉載引用請註明出處:http://blog.csdn.net/jiahui524

原始碼下載:http://download.csdn.net/download/jiahui524/3799819

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.