美文网首页
Android文件File

Android文件File

作者: Anwfly | 来源:发表于2020-10-12 22:24 被阅读0次

    一、SD的使用SD卡文件权限

    sdk卡的读写权限

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

    二、SD的使用SD卡挂载状态判断

    //获取sdk 的挂载状态
    String status = Environment.getExternalStorageState();
    // 判断sdk 的挂载状态
    if (status.equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {
         // 此时SD是可读写的
        Toast.makeText(MainActivity.this, "SD卡存在", Toast.LENGTH_LONG).show();
    } else if (status.equalsIgnoreCase(Environment.MEDIA_MOUNTED_READ_ONLY)) {
        Toast.makeText(MainActivity.this, "虽然SD存在,但是为只读状态",                                                                                           Toast.LENGTH_LONG).show();
    } else if (status.equalsIgnoreCase(Environment.MEDIA_REMOVED)) {
        Toast.makeText(MainActivity.this, "SD不存在", Toast.LENGTH_LONG).show();
    } else if (status.equalsIgnoreCase(Environment.MEDIA_SHARED)) {
        Toast.makeText(MainActivity.this, "虽然SD卡存在,但是正与PC等相连接",                                                                                       Toast.LENGTH_LONG).show();
    } else if (status.equalsIgnoreCase(Environment.MEDIA_BAD_REMOVAL)) {
        Toast.makeText(MainActivity.this, "SD卡在挂载状态下被错误取出",                                                                                           Toast.LENGTH_LONG).show();
    } else if (status.equalsIgnoreCase(Environment.MEDIA_CHECKING)) {
        Toast.makeText(MainActivity.this, "正在检查SD卡", Toast.LENGTH_LONG).show();
    } else if (status.equalsIgnoreCase(Environment.MEDIA_NOFS)) {
        Toast.makeText(MainActivity.this, "虽然SD卡存在,但其文件系统不被支持",                                                                                     Toast.LENGTH_LONG).show();
    } else if (status.equalsIgnoreCase(Environment.MEDIA_UNMOUNTABLE)) {
        Toast.makeText(MainActivity.this, "虽然SD卡存在,但是无法被挂载",                                                                                           Toast.LENGTH_LONG).show();
    } else if (status.equalsIgnoreCase(Environment.MEDIA_UNMOUNTED)) {
        Toast.makeText(MainActivity.this, "虽然SD卡存在,但是未被挂载",                                                                                           Toast.LENGTH_LONG).show();
    } else {
        Toast.makeText(MainActivity.this, "其他原因", Toast.LENGTH_LONG).show();
    }
    

    三、SD的使用SD卡根目录文件路径获取 File使用(文件夹和文件的创建)

    //get External 外置  Storage 存储      State 状态
    // 环境操作类   获取 sdk 路径    判断sdk 的状态
    String state = Environment.getExternalStorageState();
    if( state.equalsIgnoreCase(Environment.MEDIA_MOUNTED)){
        Toast.makeText(MainActivity.this, "sdk存在", Toast.LENGTH_LONG).show();
        
        /// Directory   dir   目录  文件夹
        //获得 sdk 的 路径
        // f.getAbsolutePath()  获取 文件   或者  文件夹的  绝对路径
        File f = Environment.getExternalStorageDirectory();
        Log.i("tag", "===> "+f.getAbsolutePath());
        
        //创建文件对象
        File file = new File(f,"abcd.txt");
        try {
                           //创建文件
            boolean createNewFile = file.createNewFile();
            Log.i("tag", "createNewFile====> "+createNewFile);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    

    四、SD的使用遍历指定SD卡目录下面所有文件(递归以及文件过滤器)

    //递归      方法 调用自身      注意:入口  出口       递归不能太深 不然会内存溢出
    File f = Environment.getExternalStorageDirectory();
    //getText(f);
    getTextFilter(f);
    
    // 递归方法   查询所有符合条件的内容(本案例是查找后缀为 .png 的文件)
    public void getText(File f){
        //获得   它里面的所有文件和 文件夹对象
        File[] listFiles = f.listFiles();
        if(listFiles!=null){
            for (File file : listFiles) {
                // 遍历  判断  根目录下  所有文件  和文件夹对象
                // 同时   是文件   以 .txt结尾   输出
                if( file.isFile() && file.getName().endsWith(".png")){
                    System.out.println(file.getName());
                    // 存入 集合     交给适配器  
                    
                }else{// 是文件夹     继续打开    获得   它里面的所有文件和 文件夹对象
                    getText(file);
                }
            }
        }
    }
    // 使用过滤器  递归
    public void getTextFilter(File f){
        //获得   它里面的所有文件和 文件夹对象
            if(f!=null){
                File[] listFiles = f.listFiles(new FileFilter() {
                    @Override
                    public boolean accept(File pathname) {
                        if(pathname.isFile() && pathname.getName().endsWith(".png")){
                            //System.out.println(pathname.getName());
                            return true;
                        }else{
                            getTextFilter(pathname);
                        }
                        return false;
                    }
                });
            if(listFiles!=null){
                for (File file : listFiles) {
                    System.out.println(file.getName());
                }
            }
        }
    }
    

    相关文章File

    相关文章

      网友评论

          本文标题:Android文件File

          本文链接:https://www.haomeiwen.com/subject/ibyasktx.html