本文实例讲述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);
}
}
测试结果如下: