一、概述
外部存储可以通过物理介质提供(如SD卡),也可以通过将内部存储中的一部分封装而成,设备可以有多个外部存储实例。<借鉴>
安卓中在SD卡里面保存文件是很常见的,一般项目中会有保存图片文件夹,音乐文件夹,视频文件夹,聊天记录等等。。。。
今天我们就从保存SD卡公共目录,SD卡私有目录,和保存文件个文件夹,来一步一步进行解析。
二、代码
(测试手机华为4.4.4)
首先看下Files工具类
1.//判断是否有Sd卡
public static boolean isSDCardMounted(){
return Environment.getExternalStorageDirectory().equals("Environment.MEDIA_MOUNTED");
}
2.//获取SD卡根目录
public static String getSDCardBaseDir(){
if (isSDCardMounted()) {
return Environment.getExternalStorageDirectory().getAbsolutePath();
}
return null;
}
//看下SD卡根目录打印结果
其中这个emulated的意思是手机自带存储卡。并不是外置的存储卡
三、首先把一张图片保存到SD卡公共目录上;
先介绍一个方法:getExternalStoragePublicDirectory(String type) 返回类型 Files
此方法是确定公共目录下的具体目录 例:type=Environment.DIRECTORY_PICTURES
//看下打印结果
首先从drawable中获取小机器人图片,首先获取Resources类然后转为bitmap,在把bitmap转为byte[];
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.ic_launcher);
private byte[] getbytes(Bitmap bm) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
//往SD卡里面存储,首先可以修改下图片的名字,用系统时间来作为图片的名称
private String initDate() {
Date date=new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat=new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");
return dateFormat.format(date)+".jpg";
}
//此方法是确定公共目录下的具体目录 例:type=Environment.DIRECTORY_PICTURES
File file=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
现在已经确定好了公共目录和文件名称组合成文件的路径
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File(file,initDate)));
try {
bos = new BufferedOutputStream(new FileOutputStream(new File(file, initDate())));
bos.write(byte);//此处就是你转的字节数组byte
bos.flush();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
bos.close();
} catch (Exception e2) {
}
}
现在打印下图片保存的完整路径
公共目录下图片已经保存完毕。
2.2:现在在存入自定义目录下
一般在项目中都会建一个自定义目录来存放自己的东西
自定义目录最关键的是:(获取SD卡的绝对路径)此处的淘宝就是文件名
File file=Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+taobao;
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File(file,initDate)));
判断是否此目录,没有的话就创建。其中mkdis()和mkir()是有区别的
if (!file.exists()) {
file.mkdirs();// 递归创建自定义目录
}
此处为存储图片,接下来打印下路径
try {
bos = new BufferedOutputStream(new FileOutputStream(new File(
file, fileName)));
bos.write(data);
bos.flush();
return true;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}