SD卡有时候可能因为用户将其挂载在PC上,或者设为只读,或者没有插入SD卡,所以使用SD卡存储数据之前必须检测SD卡是否可用。
1.在清单文件中加入:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
这样为我们读写SD卡提供了权限。
2.获取SD卡的状态使用:
Environment.getExternalStorageState()
所以检测是否可以写的语句为:
Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())
所以往SD卡读取文件的代码如下:
public String getFileFromSdcard(String filename) {
FileInputStream fileInputStream = null;
//缓冲区,和磁盘无关,不需要关闭
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
File file = new File(Environment.getExternalStorageDirectory(),
filename);
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
try {
fileInputStream = new FileInputStream(file);
int len = 0;
byte[] data = new byte[1024];
while((len = fileInputStream.read(data))!= -1){
outputStream.write(data, 0, len);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if (fileInputStream != null){
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return new String(outputStream.toByteArray());
}
写入文件代码如下:
public boolean saveContentToSdcard(String filename, String content) {
boolean flag = false;
FileOutputStream fileOutputStream = null;
// 获得sdcrad所在的路径
File file = new File(Environment.getExternalStorageDirectory(),
filename);
// 判断sdcard是否可用
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
try {
fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(content.getBytes());
flag = true;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return flag;
}