SD卡使用的是FAT(File Allocation Table)的文件系统,不支持访问模式和权限控制,SD卡适用于保存大尺寸的文件或者是一些无需设置访问权限的文件
Android模拟器支持SD卡,但模拟器中没有缺省的SD卡,开发人员须在模拟器中手工添加SD卡的映像文件
为了读\写SD卡上的文件,必须在AndroidManifest.xml中添加读\写SD卡的权限
在SD卡上创建与删除文件的权限
Android.permission.MOUNT_UNMOUNT_FIFESYSTEMS
向SD卡写入数据的权限
Android.permission.WRITE_EXTERNAL_STORAGE
编程访问SD卡方法一
首先需要检测系统的/mnt/sdcard目录是否可用
使用文件的输入输出流对SD卡里的文件进行读写
编程访问SD卡方法二
调用Environment的getExternalStorageState()方法判断手机上是否有SD卡,并且应用程序具有读写SD卡的权限
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
调用Environment的getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的根目录
使用文件的输入输出流对SD卡里的文件进行读写.
核心代码
写入文件到sd卡
//如果手机插入了SD卡,而且应用程序具有访问SD的权限
if (Environment.getExternalStorageState()
.equals(Environment.MEDIA_MOUNTED))
{
//获取SD卡的目录
File sdCardDir = Environment.getExternalStorageDirectory();
File targetFile = new File(sdCardDir.getCanonicalPath()+ FILE_NAME);
//以指定文件创建
RandomAccessFile对象,第一个参数是文件名称,第二个参数是读写模式
RandomAccessFile raf = new RandomAccessFile(targetFile , "rw");
//将文件记录指针移动到最后
raf.seek(targetFile.length());
// 输出文件内容
raf.write(content.getBytes());
raf.close();
}
读取sd卡的文件
//如果手机插入了SD卡,而且应用程序具有访问SD的权限
if (Environment.getExternalStorageState()
.equals(Environment.MEDIA_MOUNTED))
{
//获取SD卡对应的存储目录
File sdCardDir = Environment.getExternalStorageDirectory();
//获取指定文件对应的输入流
FileInputStream fis = new FileInputStream(sdCardDir.getCanonicalPath() + FILE_NAME);
//将指定输入流包装成BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
StringBuilder sb = new StringBuilder("");
String line = null;
//一直读,直到读到最后跳出
while((line = br.readLine()) != null)
{
//一直追加读出的内容
sb.append(line);
}
//返回读出的内容,并把它转化为字符串
return sb.toString();
}
注意,还要加权限
<!-- 在SD卡中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 向SD卡写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
下面列举一个实例,主要是按下写入按钮后把EditText的内容写入到sd卡里,然后按下读取按钮后就可以把sd卡里的文件读出来