7.手机sd卡读写案例

本节分享如何将自己的文件存到内存卡里面。

如何将自己的内存卡的已用大小和总大小取出来

 

sd卡的读写过程

第一步:判断你是不是给手机装了sd卡,

//在这一步对于,现在的高版本api手机好像不是那么适用,

//这是在试过oppo 和 coolpad 和魅族手机试出来的,

//可能是代码问题,或者软件问题,未解决,

 

第二步:判断成功了之后调用方法来获得这个sd卡的位置信息

//我的真机调试过程获得的是我的手机内部储存的信息

 

 

第三步:使用IO读写文件

//要打开sd卡的创建删除文件的权限

//打开xiangsd卡中写入文件的权限

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

在使用io的知识

创建删除文件,以及对文件内容的更改

 

 

我是用我的coolpad做的实验,为API18

在模拟机调试时可以获得sd卡的位置

//正常的自己创建路径找到内存卡中的文件夹是可以的,这是我的coolpad的内存卡的地址

//这是我的自己用手机查看的内存卡目录
File file = new File("/storage/sdcard1/liyan.txt")

//这是内部储存的地址
//虽然下面这一个是应该SD卡的位置,但真机调试时就是内部储存地址
String sdpath = Environment.getExternalStorageDirectory().getPath();

File file = new File("/storage/emulated/0/liyan.txt")

//这一行就是说,在storage目录下sdcard1目录下,创建一个liyan.txt

//经试验成功,另外想写什么地址都可以成功找到,前提是地址有效

//然后使用java中的io知识

 

注意,但是我们开发的环境绝对不是面向一种手机的

但是不同的手机的sd卡的位置又不尽相同所以,

我们就需要用方法获取到一个sd卡的位置

代码如下

        b_save.setOnClickListener(new View.OnClickListener() {
            @Override

            public void onClick(View v) {
                //开始点击方法

                if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//判断是不是可用的sd卡
                try {
                    //这是字节流要写进去的字符串
                    String s = "nihao**shijie";

                    //这是我的coolpad的内存卡的地址
                    //File file = new File("/storage/sdcard1/liyan.txt");

                    //这是内部储存的地址
                    //File file = new File("/storage/emulated/0/liyan.txt");

                    //这是我们按理说取到的sd卡的路径
                    String sdpath = Environment.getExternalStorageDirectory().getPath();
             //英文意思为获取外部储存目录
//这个也是按理说取到sd卡的路径,不过最后加了一个斜杠和文件的名字, //这是两种是实现方法 String location = Environment.getExternalStorageDirectory().toString()+"/"+"tao.txt"; //创建一个文件 File file = new File(location); //创建一个文件,先是地址再是文件名字 File file_2 = new File(sdpath,"huishou.txt"); //实例化 FileOutputStream fos = new FileOutputStream(file); FileOutputStream fos_2 = new FileOutputStream(file_2); //文件写入 fos.write(s.getBytes()); fos_2.write(s.getBytes()); //文件关闭 fos.close(); fos_2.close(); //总结一下,这里按照道理来讲应该是将文件保存到我们的sd卡下, //但是实际上保存的是,我手机目录之下, //为了确定我是不是写错了,我关闭了我的sd卡读写以及修改权限, //这时候就写不进去了, //这种现象表明应该是我的手机出现了问题, //!!!!!!!!!!!!!!经过调试在电脑上的虚拟机 //哑巴里,果然是这样 //吐司显示一下能够检测到了 Toast.makeText(MainActivity.this, "储存卡已经检测到了", Toast.LENGTH_SHORT).show(); //说明一下存在的位置 dm.setText("huishou.txt储存的地址是" + sdpath + "\n" + "tao储存的地址是" + location); //Toast.makeText(MainActivity.this, "储存卡可用"+sdpath+",已经储存到"+location, Toast.LENGTH_SHORT).show(); } catch (Exception e) { Toast.makeText(MainActivity.this, "抛出异常了,有可能是mainfest权限没有打开", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } }else { Toast.makeText(MainActivity.this, "错误没有检测到sd卡", Toast.LENGTH_SHORT).show(); } } });

 

 

获取sd卡信息

 

//这些都是在oncreate哪个函数里面
//找到两个文本域用来显示
        final TextView tv_total = (TextView) findViewById(R.id.tv_1);
        final TextView tv_useable = (TextView) findViewById(R.id.tv_2);

        File file = Environment.getExternalStorageDirectory();//获取外部储存目录

        final long total = file.getTotalSpace();
        final long useable = file.getUsableSpace();

        final String ok =  android.text.format.Formatter.formatFileSize(this, total);
        final String ok_2 = android.text.format.Formatter.formatFileSize(this,useable);
        //在Java中,final的作用主要有一下三个方面~
        // 第一,被final修饰的类不能被继承。
        // 第二,被final修饰的方法不能被重写。
        // 第三,被final修饰的变量不能被重新赋值。

        Button b_gett = (Button) findViewById(R.id.b_get);
        b_gett.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                tv_total.setText(ok);
                tv_useable.setText(ok_2);

            }
        });

 

 

上面的formatter是,这个包里的不要搞错,老版本的eclipse这个不同

 

 

从图上看出:总大小2.10GB,还剩下0.94GB

 

 

 

 

 

 

 












posted on 2019-09-03 00:03  盛世孤舟  阅读(449)  评论(0)    收藏  举报

导航