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

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

 

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

 

android内存的读写 手机内存读写_android内存的读写

android内存的读写 手机内存读写_android内存的读写_02