android在SD卡保存文件和文件夹

一、概述

外部存储可以通过物理介质提供(如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();
				}
			}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值