本文實例講述Android開發之SD卡文件操作。分享給大家供大家參考,具體如下:
爲了正常的操作SD卡,需要在AndroidManifeat.xml中聲明SD卡的權限:添加代碼如下:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAG" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
添加以上的代碼後:
我們首先獲取SD卡信息是通過Environment類來實現的,該類是App獲取各種目錄信息的工具,一些常用的方法如下:
方法 | 功能 |
---|---|
getRootDirectory | 得到系統根目錄的路徑 |
getDataDirectory | 得到系統數據目錄的路徑 |
getDownloadCacheDirectory | 得到下載緩存目錄的路徑 |
getExternalStorageDirectory | 獲取外部存儲(SD卡)的路徑 |
getExternalStorageState | 獲取SD卡的狀態 |
getExternalStoragePublicDirectory | 獲取SD卡指定類型目錄的路徑 |
getStorageState | 獲得指定目錄的狀態 |
爲了更好的瞭解上面的方法,下面用一個測試案例來展示效果:
佈局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical"
android:padding="10dp" >
<TextView
android:id="@+id/tv_file_basic"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="17sp" />
</LinearLayout>
java文件:
package cn.edu.hznu.demo;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Build.VERSION;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class FileBasicActivity extends AppCompatActivity {
private TextView tv_file_basic;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_basic);
tv_file_basic = (TextView) findViewById(R.id.tv_file_basic);
getEnvironmentInfo();
}
@TargetApi(Build.VERSION_CODES.KITKAT)
private void getEnvironmentInfo() {
String desc = "系統環境(含SD卡)的信息如下:";
desc = String.format("%s\n 根目錄路徑:%s", desc,
Environment.getRootDirectory().getAbsolutePath());
desc = String.format("%s\n 數據目錄路徑:%s", desc,
Environment.getDataDirectory().getAbsolutePath());
desc = String.format("%s\n 下載緩存目錄路徑:%s", desc,
Environment.getDownloadCacheDirectory().getAbsolutePath());
desc = String.format("%s\n 外部存儲(即SD卡)目錄路徑:%s", desc,
Environment.getExternalStorageDirectory().getAbsolutePath());
desc = String.format("%s\n 外部存儲(即SD卡)狀態:%s", desc,
Environment.getExternalStorageState());
desc = String.format("%s\n SD卡的相機目錄路徑:%s", desc,
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM));
if (VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
desc = String.format("%s\n SD卡的文錄路徑:%s", desc,
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS));
}
desc = String.format("%s\n SD卡的下載目錄路徑:%s", desc,
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));
desc = String.format("%s\n SD卡的圖片目錄路徑:%s", desc,
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES));
desc = String.format("%s\n SD卡的視頻目錄路徑:%s", desc,
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES));
desc = String.format("%s\n SD卡的音樂目錄路徑:%s", desc,
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC));
tv_file_basic.setText(desc);
}
}
測試結果如下: