天天看點

android sd卡列目錄檔案_Android正确擷取SD卡目錄及使用SD卡目錄

此文乃是轉載,原文在這裡連結

SD卡作為手機的擴充儲存設備,在手機中充當硬碟角色,可以讓我們手機存放更多的資料以及多媒體等大體積檔案。是以檢視SD卡的記憶體就跟我們檢視硬碟的剩餘空間一樣,是我們經常操作的一件事,那麼在Android開發中,我們如何能擷取SD卡的記憶體容量呢?

1、判斷手機是否插入SD卡

Java代碼

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){

doSth();

//....

}

2、然後才能操作SD卡

File path = Environment.getExternalStorageDirectory();

這個PATH就是你要操作的路徑,當然你在操作的時候最好對SD卡的使用做個檢測判斷,當SD卡有存儲空間時才可以進行存儲操作。

StatFs statfs =newStatFs(path.getPath());

擷取BLOCK的SIZE

longblocSize = statfs.getBlockSize();

擷取BLOCK數量

longtotalBlocks = statfs.getBlockCount()

空閑的Block的數量

longavailaBlock = statfs.getAvailableBlocks();

最後别忘了,要擷取SD卡上面的資訊,必須先對SD卡有通路的權限,是以最後一件事就是需要添加通路擴充裝置的權限,更多權限請通路:Android 應用程式開發權限一覽表。

XML/HTML代碼

android:name="android.permission.WRITE_EXTERNAL_STORAGE">

2、獲得SD卡目錄

sdCardDir = Environment.getExternalStorageDirectory();//擷取SDCard目錄

3、寫入檔案

File f = Environment.getExternalStorageDirectory();//擷取SD卡目錄

File fileDir =newFile(f,"test.txt");

FileOutputStream os =newFileOutputStream(fileDir);

try{

os.write(text.getBytes());

os.close();

showToast("儲存到SD卡中");

}catch(IOException

e) {

//

TODO Auto-generated catch block

e.printStackTrace();

}

4、讀取檔案

File f = Environment.getExternalStorageDirectory();//擷取SD卡目錄

File fileDir =newFile(f,"test.txt");

is =newFileInputStream(fileDir);

ByteArrayOutputStream bos =newByteArrayOutputStream();

byte[] array =newbyte[1024];

intlen = -1;

while(

(len = is.read(array)) != -1){

bos.write(array,0,len);

}

bos.close();

is.close();

returnbos.toString();

5、讀取權限

在AndroidManifest.xml中加入通路SDCard的權限如下:

要往SDCard存放檔案,程式必須先判斷手機是否裝有SDCard,并且可以進行讀寫。

6、其它方法

getCacheDir()方法用于擷取/data/data//cache目錄。

getFilesDir()方法用于擷取/data/data//files目錄。

其實就是普通的檔案操作,不過還是有些地方需要注意。比如:

1.加入sdcard操作權限;

2.确認sdcard的存在;

3.不能直接在非sdcard的根目錄建立檔案,而是需要先建立目錄,再建立檔案;

在AndroidManifest.xml添加sdcard操作權限

變量聲明:

private final static String PATH = "/sdcard/digu";

private final static String FILENAME = "/notes.txt";

向sdcard寫檔案

private void onWrite() {

try {

Log.d(LOG_TAG, "Start Write");

//1.判斷是否存在sdcard

if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {

//目錄

File path = new File(PATH);

//檔案

File f = new File(PATH + FILENAME);

if(!path.exists()){

//2.建立目錄,可以在應用啟動的時候建立

path.mkdirs();

}

if (!f.exists()) {

//3.建立檔案

f.createNewFile();

}

OutputStreamWriter osw = new OutputStreamWriter(

new FileOutputStream(f));

//4.寫檔案,從EditView獲得文本值

osw.write(editor.getText().toString());

osw.close();

}

} catch (Exception e) {

Log.d(LOG_TAG, "file create error");

}

}

接着我們在使用SDcard進行讀寫的時候 會用到Environment類下面的幾個靜态方法

1: getDataDirectory()  擷取到Androi中的data資料目錄

2:getDownloadCacheDirectory()  擷取到下載下傳的緩存目錄

4:getExternalStorageState() 擷取外部設定的目前狀态 一般指SDcard,

android系統中對于外部設定的狀态,我們比較常用的應該是MEDIA_MOUNTED(SDcard存在并且可以進行讀寫)MEDIA_MOUNTED_READ_ONLY(SDcard存在,隻可以進行讀操作)  當然還有其他的一些狀态,可以在文檔中進行查找到

5:getRootDirectory()  擷取到Android Root路徑

6:isExternalStorageEmulated() 傳回Boolean值判斷外部設定是否有效

7:isExternalStorageRemovable()  傳回Boolean值,判斷外部設定是否可以移除

【注】上面進行紅色标記的方法,我們會常用

Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)  代碼中這句:我們對SDcard的狀态進行判斷,

下面看實作SDCard進行檔案讀寫操作的Demo:

packagecom.jiangqq.sdcard;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.os.Bundle;

importandroid.os.Environment;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.Toast;

publicclassSDcardActivityextendsActivity {

privateButton bt1, bt2;

privateEditText et1, et2;

privatestaticfinalString FILENAME = "temp_file.txt";

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

bt1 = (Button)this.findViewById(R.id.bt1);

bt2 = (Button)this.findViewById(R.id.bt2);

et1 = (EditText)this.findViewById(R.id.et1);

et2 = (EditText)this.findViewById(R.id.et2);

bt1.setOnClickListener(newMySetOnClickListener());

bt2.setOnClickListener(newMySetOnClickListener());

}

privateclassMySetOnClickListenerimplementsOnClickListener {

@Override

publicvoidonClick(View v) {

File file =newFile(Environment.getExternalStorageDirectory(),

FILENAME);

switch(v.getId()) {

caseR.id.bt1://使用SDcard寫操作

if(Environment.getExternalStorageState().equals(

Environment.MEDIA_MOUNTED)) {

try{

FileOutputStream fos =newFileOutputStream(file);

fos.write(et1.getText().toString().getBytes());

fos.close();

Toast.makeText(SDcardActivity.this, "寫入檔案成功",

Toast.LENGTH_LONG).show();

}catch(Exception e) {

Toast.makeText(SDcardActivity.this, "寫入檔案失敗",

Toast.LENGTH_SHORT).show();

}