精华内容
下载资源
问答
  • android开发 File.mkdirs()方法,部分手机可以创建文件夹成功,部分无法创建成功。 通过Environment.getExternalStorageDirectory().getPath() ;获得sd卡位置, private static void createDirByCoding(String ...
  • 打开android手机sdcard文件夹目录

    千次阅读 2012-08-06 15:53:18
    // 打开文件夹的方法 public void OpenFile() { try { Intent intent = new Intent(); /* 开启Pictures画面Type设定为image */ intent.setType("image/*"); /* 使用Intent.ACTION_GET_CONTENT这个Action */ ...
    // 打开文件夹的方法
    public void OpenFile() {
    try {
    Intent intent = new Intent();
    /* 开启Pictures画面Type设定为image */
    intent.setType("image/*");
    /* 使用Intent.ACTION_GET_CONTENT这个Action */
    intent.setAction(Intent.ACTION_GET_CONTENT);
    /* 取得相片后返回本画面 */
    startActivityForResult(intent, SHOW_ACTIVITY_TWO);
    } catch (ActivityNotFoundException e) {
    // TODO: handle exception
    Toast.makeText(Index.this, "can not open File", Toast.LENGTH_LONG)
    .show();
    }
    }
    展开全文
  • 昨天项目需要向指定的文件夹下保存图片,需要使用文件管理器去选择指定的文件夹,当然最后由于逻辑太奇葩(不能选择文件夹,只能选择文件夹下的某一个文件)被否定了,改为自己读取手机存储的文件夹,并且可以创建。...

            昨天项目需要向指定的文件夹下保存图片,需要使用文件管理器去选择指定的文件夹,当然最后由于逻辑太奇葩(不能选择文件夹,只能选择文件夹下的某一个文件)被否定了,改为自己读取手机存储的文件夹,并且可以创建。当中遇到了几个问题记录一下:

          1.手机存储现在由三部分组成了基本上:内部存储、手机内置外部存储(ROM)、手机SD卡

             1)内部存储:

         getFilesDir() 
    这个方法可以的到手机内部的存储(好像是包文件夹下的,我没测试)

            2)手机内置外部存储(Rom):

        new File(Environment.getExternalStorageDirectory().getAbsolutePath())
    这个方法可以得到文件

           3)SD卡存储 问题来了,上面的方法好像似曾相识,不就是得到Sd卡吗?我也是被困扰了很久,当然也没得到答案,没办法了,通过下面方法得到了:

            File file = new File("/storage/sdcard1");
            if (null != file.listFiles() && file.listFiles().length > 0) {
                fileNameList.add("外置存储");
            }

    更正:如果用以上方法来判断是否挂在sd卡,以及获取sd卡的根目录,测试中有些手机是不准确的,因为有的手机外置sd卡的根路径不一定是“/storage/sdcard1”,因此找个一个大神的方法,抽取出来他的工具类以及bean类,如下:

           

      public class StorageUtils {
        public static ArrayList<StorageBean> getStorageData(Context pContext) {
            final StorageManager storageManager = (StorageManager) pContext.getSystemService(Context.STORAGE_SERVICE);
            try {
                //得到StorageManager中的getVolumeList()方法的对象
                final Method getVolumeList = storageManager.getClass().getMethod("getVolumeList");
                //得到StorageVolume类的对象
                final Class<?> storageValumeClazz = Class.forName("android.os.storage.StorageVolume");
                //获得StorageVolume中的一些方法
                final Method getPath = storageValumeClazz.getMethod("getPath");
                Method isRemovable = storageValumeClazz.getMethod("isRemovable");
    
                Method mGetState = null;
                //getState 方法是在4.4_r1之后的版本加的,之前版本(含4.4_r1)没有
                // (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/android/os/Environment.java/)
                if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {
                    try {
                        mGetState = storageValumeClazz.getMethod("getState");
                    } catch (NoSuchMethodException e) {
                        e.printStackTrace();
                    }
                }
                //调用getVolumeList方法,参数为:“谁”中调用这个方法
                final Object invokeVolumeList = getVolumeList.invoke(storageManager);
                final int length = Array.getLength(invokeVolumeList);
                ArrayList<StorageBean> list = new ArrayList<>();
                for (int i = 0; i < length; i++) {
                    final Object storageValume = Array.get(invokeVolumeList, i);//得到StorageVolume对象
                    final String path = (String) getPath.invoke(storageValume);
                    final boolean removable = (Boolean) isRemovable.invoke(storageValume);
                    String state;
                    if (mGetState != null) {
                        state = (String) mGetState.invoke(storageValume);
                    } else {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                            state = Environment.getStorageState(new File(path));
                        } else {
                            if (removable) {
                                state = EnvironmentCompat.getStorageState(new File(path));
                            } else {
                                //不能移除的存储介质,一直是mounted
                                state = Environment.MEDIA_MOUNTED;
                            }
                        }
                    }
                    long totalSize = 0;
                    long availaleSize = 0;
                    if (Environment.MEDIA_MOUNTED.equals(state)) {
                        totalSize = StorageUtils.getTotalSize(path);
                        availaleSize = StorageUtils.getAvailableSize(path);
                    }
                    StorageBean storageBean = new StorageBean();
                    storageBean.setAvailableSize(availaleSize);
                    storageBean.setTotalSize(totalSize);
                    storageBean.setMounted(state);
                    storageBean.setPath(path);
                    storageBean.setRemovable(removable);
                    list.add(storageBean);
                }
                return list;
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        private static long getTotalSize(String path) {
            try {
                final StatFs statFs = new StatFs(path);
                long blockSize = 0;
                long blockCountLong = 0;
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
                    blockSize = statFs.getBlockSizeLong();
                    blockCountLong = statFs.getBlockCountLong();
                } else {
                    blockSize = statFs.getBlockSize();
                    blockCountLong = statFs.getBlockCount();
                }
                return blockSize * blockCountLong;
            } catch (Exception e) {
                e.printStackTrace();
                return 0;
            }
        }
    
        private static long getAvailableSize(String path) {
            try {
                final StatFs statFs = new StatFs(path);
                long blockSize = 0;
                long availableBlocks = 0;
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
                    blockSize = statFs.getBlockSizeLong();
                    availableBlocks = statFs.getAvailableBlocksLong();
                } else {
                    blockSize = statFs.getBlockSize();
                    availableBlocks = statFs.getAvailableBlocks();
                }
                return availableBlocks * blockSize;
            } catch (Exception e) {
                e.printStackTrace();
                return 0;
            }
        }
    
        private static final long A_GB = 1073741824;
        private static final long A_MB = 1048576;
        private static final int A_KB = 1024;
    
        public static String fmtSpace(long space) {
            if (space <= 0) {
                return "0";
            }
            double gbValue = (double) space / A_GB;
            if (gbValue >= 1) {
                return String.format("%.2fGB", gbValue);
            } else {
                double mbValue = (double) space / A_MB;
                if (mbValue >= 1) {
                    return String.format("%.2fMB", mbValue);
                } else {
                    final double kbValue = space / A_KB;
                    return String.format("%.2fKB", kbValue);
                }
            }
        }
    }
    public class StorageBean implements Parcelable {
        /**
         * 根路径
         */
        private String path;
        /**
         *挂在情况 一种是挂在了 mounted  一种是未挂在 removed
         */
        private String mounted;
        /**
         * 是否可以移除,如果不可移除表示内部存储,可移除代表TF存储(外挂SD卡)
         */
        private boolean removable;
        /**
         * 总共大小
         */
        private long totalSize;
        /**
         * 可用大小
         */
        private long availableSize;
    
        public String getPath() {
            return path;
        }
    
        public void setPath(String path) {
            this.path = path;
        }
    
        public String getMounted() {
            return mounted;
        }
    
        public void setMounted(String mounted) {
            this.mounted = mounted;
        }
    
        public boolean getRemovable() {
            return removable;
        }
    
        public void setRemovable(boolean removable) {
            this.removable = removable;
        }
    
        public long getTotalSize() {
            return totalSize;
        }
    
        public void setTotalSize(long totalSize) {
            this.totalSize = totalSize;
        }
    
        public long getAvailableSize() {
            return availableSize;
        }
    
        public void setAvailableSize(long availableSize) {
            this.availableSize = availableSize;
        }
    
    
        @Override
        public int describeContents() {
            return 0;
        }
    
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(this.path);
            dest.writeString(this.mounted);
            dest.writeByte(removable ? (byte) 1 : (byte) 0);
            dest.writeLong(this.totalSize);
            dest.writeLong(this.availableSize);
        }
    
        public StorageBean() {
        }
        protected StorageBean(Parcel in) {
            this.path = in.readString();
            this.mounted = in.readString();
            this.removable = in.readByte() != 0;
            this.totalSize = in.readLong();
            this.availableSize = in.readLong();
        }
    
        public static final Parcelable.Creator<StorageBean> CREATOR = new Parcelable.Creator<StorageBean>() {
            @Override
            public StorageBean createFromParcel(Parcel source) {
                return new StorageBean(source);
            }
    
            @Override
            public StorageBean[] newArray(int size) {
                return new StorageBean[size];
            }
        };
    
        @Override
        public String toString() {
            return "StorageBean{" +
                    "path='" + path + '\'' +
                    ", mounted='" + mounted + '\'' +
                    ", removable=" + removable +
                    ", totalSize=" + totalSize +
                    ", availableSize=" + availableSize +
                    '}';
        }
    }
           以上工具类就可以了,不过发现有的手机读取出来的集合中居然后8个存储位置,当然只要取前两个就可以了(其他的不知道什么鬼)。

           2. Android6.0系统的手机读取不到外置存储下面的文件和文件夹

       File[] files = file.listFiles();
    这个方法中files为空。什么鬼?后来发现是权限问题,虽然在功能清单文件中申请了权限,但是6.0需要代码中对危险权限进行动态二次申请所以加上如下代码:

                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//6.0手机
                        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
                                ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {//没有授权权限
                            ActivityCompat.requestPermissions(this,
                                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
                                    MY_PERMISSIONS_REQUEST_READ_CONTACTS_SD);
                        } else {//授权了权限
                            file = new File("/storage/sdcard1");
                            nextFileList(file);
                        }
                    } else {//6.0以下系统
                        file = new File("/storage/sdcard1");
                        nextFileList(file);
                    }

        @Override
        public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
            switch (requestCode) {
                case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {//手机内置外部存贮
                    // If request is cancelled, the result arrays are empty.
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {//授权同意
                        file = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
                        nextFileList(file);
                    } else {//授权被拒绝
    
                    }
                }
                break;
                case MY_PERMISSIONS_REQUEST_READ_CONTACTS_SD://sd卡
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {//授权同意
                        file = new File("/storage/sdcard1");
                        nextFileList(file);
                    } else {//授权被拒绝
    
                    }
                    break;
            }
        }
    当然这里对于用户拒绝了需要再次请求处理我们没有处理,就没有继续研究。

       

            3.显示的文件夹中含有隐藏的文件夹,需要删除掉,这个其实很简单,因为隐藏的文件夹都是以“.”开头的,所以使用如下方法就可以,顺便还有文件夹按照字母排序的方法

            for (int num = 0; num < files.length; num++) {
                if (files[num].isDirectory()) {
                    String name = files[num].getName();
                    if (!name.startsWith(".")) {//排除掉隐藏的文件夹
                        fileNameList.add(name);
                    }
                }
            }
            Collections.sort(fileNameList, Collator.getInstance(Locale.ENGLISH));//对文件夹名称排序

    最后把整个demo放到我们资源中,有需要的可以下载。。。。



    展开全文
  • 主要为大家详细介绍了Android获取手机文件夹及文件列表的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Android中文件与文件夹的创建(file

    万次阅读 2017-02-09 13:16:18
    Android中文件与文件夹的创建(file
    1.关于文件夹的创建

    //新建一个File,传入文件夹目录
    File file = new File("/mnt/sdcard/work/mywork");
    //判断文件夹是否存在,如果不存在就创建,否则不创建
    if (!file.exists()) {
        //通过file的mkdirs()方法创建目录中包含却不存在的文件夹
        file.mkdirs();
    }




    2.mkdir()与mkdirs()的区别:
    mkdir()是只能创建一级目录(文件夹),如果这一级目录的上面还有没有创建的目录(文件夹),那么程序会报错。
    mkdirs()是可以创建多级目录(文件夹),它是把所有没有的目录(文件夹)都给创建出来。
    所以开发中常用mkdirs()来创建目录(文件夹)。

    3.关于手机内置SD卡下创建file文件(不创建文件夹,使用已有文件夹目录)

    //新建一个File类型的成员变量,传入文件名路径。
    mFile = new File("/mnt/sdcard/zhiyuan.txt");
            //判断文件是否存在,存在就删除
            if (mFile.exists()){
                mFile.delete();
            }
            try {
                  //创建文件
                  mFile.createNewFile();
                  //给一个吐司提示,显示创建成功
                  Toast.makeText(getApplicationContext(), "文件创建成功", Toast.LENGTH_SHORT).show();
                } catch (IOException e) {
                    e.printStackTrace();
            }
    
    



    4.关于外置SD卡下创建file文件(不创建文件夹,使用已有文件夹目录)

    //先通过Environment(环境)的getExternalStorageState()方法来获取手机环境下的外置存储卡的状态,判断是否为挂载状态。
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        //如果为挂载状态,那么就通过Environment的getExternalStorageDirectory()方法来获取
          外置存储卡的目录,然后加上我们自己要创建的文件名(记住文件名前要加一个"/"),这样
          就生成了我们要创建的文件路径。
        String path = Environment.getExternalStorageDirectory() + "/zhiyuan.txt";
        //新建一个File对象,把我们要建的文件路径传进去。
        File file = new File(path);
        //方便查看,在控制台打印一下我们的存储卡目录。
        Log.d("=====TAG=====", "onClick: "+Environment.getExternalStorageDirectory());
        //判断文件是否存在,如果存在就删除。
        if (file.exists()) {
            file.delete();
        }
        try {
            //通过文件的对象file的createNewFile()方法来创建文件
            file.createNewFile();
            //新建一个FileOutputStream(),把文件的路径传进去
            FileOutputStream fileOutputStream = new FileOutputStream(path);
            //给定一个字符串,将其转换成字节数组
            byte[] bytes = "你好啊,今天天气不错!".getBytes();
            //通过输出流对象写入字节数组
            fileOutputStream.write(bytes);
            //关流
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
    }
    



    5.隐私文件的创建(手机没有ROOT是看不到的

    try {
       //通过类名.this的openFileOutput()方法得到输出流对象,传入两个参数,一个是String类型的文件名,
       另一个是模式,用MODE_PRIVATE,意为私有模式(会覆盖原文件)。
        FileOutputStream fileOutputStream = Main2Activity.this.openFileOutput("android.txt", MODE_PRIVATE);
       //给定一个字符串,将其转换成字节数组
        byte[] bytes = "今天天气不错,我们去爬山吧!".getBytes();
       //通过输出流对象写入字节数组
        fileOutputStream.write(bytes);
       //给一个吐司提示,显示创建成功
        Toast.makeText(getApplicationContext(), "创建成功!", Toast.LENGTH_SHORT).show();
       //关流
        fileOutputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }





    注:以上内容都需要在清单文件中加上下面的权限:
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>




    展开全文
  • file explorer无法打开data文件夹

    千次阅读 2016-02-13 16:53:21
    无法用file explorer打开data路径,点击左侧的展开图标,发现无法展开。 解决方法: 1.首先确定自己的手机是root过了的;(小米手机需要使用开发版,稳定版无法root) 2.如果你没有配置android sdk...

    无法用file explorer打开data路径,点击左侧的展开图标,发现无法展开。


    解决方法:

    1.首先确定自己的手机是root过了的;(小米手机需要使用开发版,稳定版无法root)

    2.如果你没有配置android sdk环境变量,就到你的android sdk路径下面找到platform tools目录下;

    3.打开开始----->运行---->cmd,cd到platform tools目录;

    4.在MS-DOS界面输入两条命令:

    adb shell su -c "chmod 777 /data"

    adb shell su -c "chmod 777 /data/data"


    如没意外,你再此尝试打开/data/data目录就可以成功了!

    展开全文
  • 写了一个Ap,在程序运行时会... MediaPlayer.setDataSource((new FileInputStream(new File(soundFilePath))).getFD());  MediaPlayer.setDataSource((new FileInputStream(new File(soundFilePath))).getFD());
  • 利用J2ME中提供的可选包JSR75提供的功能,浏览手机文件夹,并且将用户的照片上传到服务器,实现相册的功能。 完全实现了浏览手机的文件系统的功能。但是在浏览文件系统的时候,需要用户确认。我在使用Nokia6233的...
  • Cosmos版本上的filemanager访问手机文件系统时只显示了系统文件夹,部分客户希望做成与T卡一样,将所有文件和文件夹都能显示出来,修改如下: 1.修改函数VappFmgrInstance::getGroupCount 将if (drv_type == SRV_...
  • Android工具类:获取手机文件夹及文件列表

    千次阅读 热门讨论 2014-12-01 16:30:52
    使用方法:List> list=GetFilesUtils.getInstance().getSonNode(file); //或其他方法 使用示例: package wuwang.mypage.activity; import java.io.IOException; import java.util.ArrayList; import java.util....
  • Android手机文件及文件夹目录详解

    万次阅读 2017-08-06 15:39:43
    Android手机文件及文件夹目录详解,为您详细的介绍了Android手机下的目录特征
  • 项目中有个需求,用户通过本地或者手机拍照把多张图片截图并存储在本地文件夹FilePhoto,当用户执行完上传操作后就把FilePhoto文件夹下所有图片删除掉,刚开始代码是这样写的: public static boolean DelFilePhoto...
  • android 手机中创建文件夹

    千次阅读 2014-11-06 21:08:00
    手机中创建文件夹需要引入如下
  • Android 创建文件夹失败(File.mkdirs()) Android 10 改变了文件的存储方式不允许应用随意创建文件夹了,要用安卓提供的文件夹,提供的文件夹如下 解决办法有两个 : 使用Android规定的文件夹做操作 将gradle中的...
  • if (file.isDirectory()){//检查此路径名的文件是否是一个目录(文件夹) Log.i("zeng", "若是文件目录。继续读1" +file.getName().toString()+file.getPath().toString()); getFileName(file.listFiles()); ...
  • 我们在操作手机时需要查看一些信息,可data下的文件夹
  • Android中file ...首先在手机上下载一个软件可以修改文件夹的属性,我的是R.E.管理器 explorer打不开data文件夹怎么办?" alt="Android中file explorer打不开data文件夹怎么办?" src="http://s12.sinaimg.cn/m
  • File file = new File(SDCardRoot + dir + File.separator); if(file.exists()) { return true; } return false; /*else{ file.mkdir(); //如果不存在则创建 return false; } */ } 开始复制...
  • 转自:https://blog.csdn.net/qq_37610423/article/details/84319410 效果图: ... <div class="file-box clearboth" id="fileBox"> <label class="clone-dom" style="display:none;...
  • 一般打不打目录,是因为手机meiyo
  • Android开发用真机调试,打不开File Explorer下的data文件夹 真机先root,然后在手机上装上R.E 管理器(或类似软件),修改/data,/data/data,相应包的权限修改为可读可写可执行,ddms就可以打开显示了
  • 删除手机内置内存卡上的某个文件夹以及文件夹下的文件 public void deleteDir() { File dir = new File(Environment.getExternalStorageDirectory().getPath() + "/pdf"); deleteDirWihtFile(dir); } public ...
  • android开发如何用file读出sdcard中含图片的文件夹,并将文件夹显示到listview上????
  • 1. // 创建cloud文件夹  publicFilePath = new StringBuilder(Environment.getExternalStorageDirectory()  .getAbsolutePath())  .append(File.separator).append("cloud").append...
  • 启用tim无法访问文件夹The Secure Folder is a useful feature on Samsung devices that allows you to keep apps and files out of sight. Here’s how to enable it and use it. 安全文件夹是Samsung设备上的一项...
  • 当用真机开发Android时,连接了Eclipse后,默认在File Explorer下是达不开我们手机的data文件夹的,这里打不开是因为权限不足。以下有个小技巧可以解决这问题。  首先,测试机先root,然后在手机上安装上Root ...
  • h5调用手机相册摄像头以及文件夹

    千次阅读 2018-07-11 15:44:30
    h5调用手机相册摄像头以及文件夹在之前一家公司的时候要做一个app里面有上传头像的功能,当时研究了好久,找到了一篇文章关于h5摄像头以及相册的调用的,所以就解决了这个问题了!!我这里记录一下以便后面有人需要...
  •  File f=new File(localPath);  if(!f.exists())  {  f.mkdir();  }    String path = localPath + "/" + s;   FileOutputStream os = new FileOutputStream(path);   byte[] buffer = new byte[1024]; ...
  • android DDMS 连接真机(己ROOT),用file explore看不到data/data文件夹的解决办法问题是没有权限,用360手机助手或豌豆荚也是看不见的。 简单的办法是用RE文件管理器(授予root权限),把data和data/data设置成777...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,939
精华内容 21,575
关键字:

手机file文件夹