精华内容
下载资源
问答
  • 而用户的资源文件夹名称,早期,以及目前整整运行的手机上,等于上面这个数据库文件夹名称, 但是如果是新手机登陆微信后,资源文件夹名称就变了,和上门的不一样。 分析了一下,不再是使用“mm”+uin,而是a...

    微信数据库文件夹名是“mm”+uin做个md5的结果,这个一直没变,

    例如:com.tencent.mm\MicroMsg\16f5ac2d884e052b03c1e00654531853

    而用户的资源文件夹名称,早期,以及目前部分运行的手机上,等于上面这个数据库文件夹名称,

    但是如果是新手机登陆微信后,资源文件夹名称就变了,和上面的不一样。

    分析了一下,不再是使用“mm”+uin,而是acc+uin再做md5,

    编写了一个程序后,成功把数据自动导出,参考下图:

    本文已经结束,如有疑问,加扣扣群交流或者留言。

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

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

          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之手机文件夹目录详解

    千次阅读 2016-11-29 17:09:24
    android系统的手机文件夹目录详解 一、文件夹 1./acct/ 系统回收站,删除的系统文件。 2./cache/ 缓存 3./data/ 用户的所有程序相关数据  app/ 所有用户安装的...
    android系统的手机文件夹目录详解

    一、文件夹
    1./acct/    系统回收站,删除的系统文件。


    2./cache/    缓存


    3./data/    用户的所有程序相关数据
        app/    所有用户安装的apk文件
        app-private/
        data/    每一个应用的数据
            com.xx.appname/    每一个应用的数据都存放在本目录下的一个以包名为命名的文件夹
                cache/
                lib/
                files/
                shared_prefs/
            system/    安装app会在这里进行注册表的配置
                package.xml    注册表xml
            lost+found/
        
    4./proc/    运行时的文件


    5./dev/    设备文件,Linux系统常规文件夹,里面的文件很多都是设备模拟的文件系统


    6./storage/    手机存储设备
        sdcard0/    第一块SD存储卡

    7./firmware/    


    8./mnt/    挂载点
        adcard0/    存储卡挂载目录
        udisk/    U盘挂载目录


    9./sys/    Linux 内核文件


    10./system/    Android 系统文件
        app/    存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。
        bin/    这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件(命令)
        etc/    android系统的配置文件,比如APN接入点设置等核心配置。
        fonts/    这里面保存着系统的字体,标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T-Mobile G1上可以清楚的看到显示简体中文正常.如果你有root权限,可以往里添加自己喜欢的字体,比如雅黑。
        framework/    主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。
        lib/    里面保存的是系统底层类库,里面很多都是框架层的实现文件,一般以.so后缀结尾类似windows下的dll文件
        usr/    用户文件夹,包含共享、键盘布局、时间区域文件等。
        xbin/
        media/
            audio/    保存着安卓系统默认的铃声
                alarms/    闹铃提醒
                notificatinos/    短信或提示音
                rignstones/    来电铃声
                ui/    界面音效,比如键盘敲击声
            lockscreen/
            theme/
            wallpaper/
        lost+found/
        vendor/


    11./sbin/    系统工具,比如 ps/cp/pm 等


    二、文件
    1.init
    2.``````
    展开全文
  • Android系统的手机文件夹目录

    万次阅读 2019-10-11 11:06:12
    1./acct/ 系统回收站,删除的系统文件。 2./cache/ 缓存 3./data/ 用户的所有程序相关数据 ...com.xx.appname/ 每一个应用的数据都存放在本目录下的一个以包名为命名的文件夹 cache/ lib/ files/ shared_prefs/...

    1./acct/ 系统回收站,删除的系统文件。

    2./cache/ 缓存

    3./data/ 用户的所有程序相关数据
    app/ 所有用户安装的apk文件
    app-private/
    data/ 每一个应用的数据
    com.xx.appname/ 每一个应用的数据都存放在本目录下的一个以包名为命名的文件夹
    cache/
    lib/
    files/
    shared_prefs/
    system/ 安装app会在这里进行注册表的配置
    package.xml 注册表xml
    lost+found/

    4./proc/ 运行时的文件

    5./dev/ 设备文件,Linux系统常规文件夹,里面的文件很多都是设备模拟的文件系统

    6./storage/ 手机存储设备
    sdcard0/ 第一块SD存储卡

    7./firmware/

    8./mnt/ 挂载点
    adcard0/ 存储卡挂载目录
    udisk/ U盘挂载目录

    9./sys/ Linux 内核文件

    10./system/ Android 系统文件
    app/ 存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。
    bin/ 这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件(命令)
    etc/ android系统的配置文件,比如APN接入点设置等核心配置。
    fonts/ 这里面保存着系统的字体,标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T-Mobile G1上可以清楚的看到显示简体中文正常.如果你有root权限,可以往里添加自己喜欢的字体,比如雅黑。
    framework/ 主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。
    lib/ 里面保存的是系统底层类库,里面很多都是框架层的实现文件,一般以.so后缀结尾类似windows下的dll文件
    usr/ 用户文件夹,包含共享、键盘布局、时间区域文件等。
    xbin/
    media/
    audio/ 保存着安卓系统默认的铃声
    alarms/ 闹铃提醒
    notificatinos/ 短信或提示音
    rignstones/ 来电铃声
    ui/ 界面音效,比如键盘敲击声
    lockscreen/
    theme/
    wallpaper/
    lost+found/
    vendor/

    11./sbin/ 系统工具,比如 ps/cp/pm 等

    原文链接:https://blog.csdn.net/scotfield_msn/article/details/52455322

    system文件夹详解

    展开全文
  • android系统的手机文件夹目录详解

    万次阅读 2016-09-07 00:40:12
    android系统的手机文件夹目录详解 一、文件夹 1./acct/ 系统回收站,删除的系统文件。 2./cache/ 缓存 3./data/ 用户的所有程序相关数据  app/ 所有用户安装的...
  • 很多时候,我们需要取得应用软件自身所在的文件夹名称,其实Delphi很简单,只需一行代码即可解决:  procedure TFormMain.FormCreate(Sender: TObject); begin showmessage(ExtractFilePath(ParamStr(0)));//可...
  • Android系统中SD卡各文件夹名称及功能详解 2012-07-21 更新待续  对于初次使用Android系统的新手来说,当打开SD开一看,里面那些English的文件夹总会让自己不知所措,有些看文件夹名称,还能猜到点作用来,...
  • Android系统的手机文件夹目录详解

    万次阅读 2018-07-18 17:54:21
    一、文件夹 1./acct/ 系统回收站,删除的系统文件。 2./cache/ 缓存 3./data/ 用户的所有程序相关数据 app/ 所有用户安装的apk文件 app-private/ data/ 每一个应用的数据 com.xx.appname/ 每一个应用...
  • Android手机文件及文件夹目录详解

    万次阅读 2017-08-06 15:39:43
    Android手机文件及文件夹目录详解,为您详细的介绍了Android手机下的目录特征
  • md+空格+文件夹名称+空格+文件夹名称+空格+文件夹名称+…… 以此类推 注释:md是mkdir的缩写,这个DOS命令的含义是:建立一个新的子目录。 例如:md 电脑 手机 平板 相机,如下图: 点击“文件”→...
  • 利用J2ME中提供的可选包JSR75提供的功能,浏览手机文件夹,并且将用户的照片上传到服务器,实现相册的功能。 完全实现了浏览手机的文件系统的功能。但是在浏览文件系统的时候,需要用户确认。我在使用Nokia6233的...
  • 启用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设备上的一项...
  • /** * 从assets目录中复制整个文件夹内容到新的路径下 * @param context Context 使用... * @param oldPath String 原文件路径 如:Data(assets文件夹下文件夹名称) * @param newPath String 复制后路径 如:d...
  • Android工具类:获取手机文件夹及文件列表

    千次阅读 热门讨论 2014-12-01 16:30:52
    * 用于获取手机文件夹及文件的工具类,如果权限允许,可以获取手机上任意路径的文件列表 * GetFilesUtils使用的是懒汉式单例模式,线程安全 *@author wuwang *@since 2014.11 */ public class GetFilesUtils ...
  • bin/ 这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux系统自带的组件(命令) etc/ android系统的配置文件,比如APN接入点设置等核心配置。 fonts/ 这里面保存...
  • 在pictures文件夹
  • android对同一文件夹的文件按时间、文件大小、名称进行排序
  • public static List&lt;String&gt; getFilesAllName(String path) { File file=new File(path); File[] files=file.listFiles(); if (files == null){Log.e("error","......
  • 基于名称: /** * 按文件名排序 * @param filePath */ public static ArrayList&lt;String&gt; orderByName(String filePath) { ArrayList&lt;String&gt; FileNameList = new ArrayList&...
  • Android手机ROM定制初级教程以及Android系统文件夹结构介绍 一个完整的OM根目录会有以下几个文件夹及文件: data META-IN system boot.img  系统目录说明 1. 应用程序安装目录 1) 系统应用程序所在目录 ...
  • S60V3版手机里,各种文件夹含义!

    千次阅读 2009-08-27 17:28:00
    打开文件管理器,会看到以下文件夹: C:/system/AppsC:/system/Apps/Applnst/Appinst.ini 这个文件是用来记录安装软件的信息,随着软件安装的增多而增大。C:/system/Apps/PhotoAlbum/PhotoAlbum.ini 图片浏览器的...
  • 文件夹里的所有资源文件或脚本文件都不会被打包进发布包中,并且脚本也只能在编辑器中使用。 一般会把一些工具类的脚本或者是一些编辑时用的DLL 放在这里, 比如我们现在要做类似技能编辑器,那么编辑器的代码放在...
  • 手机内存肯定是需要清理的呐,手机空间大点,再战歌2-3年,把手机垃圾清理了,手机就又可以重回流畅了,删掉手机中这两个英文文件,恢复手机清爽流畅。 但很多人的清理方式说是在瞎清理一点也不过分,删视频...
  • 安卓系统文件夹结构详解

    千次阅读 2014-10-23 16:23:49
    核心提示:本文介绍的是Android手机系统的文件夹结构,帮助大家更直观地了解系统,作为查询工具加入收藏夹还是很不错的哦system\\app这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。...
  • drawable文件夹详解

    万次阅读 2012-06-14 16:25:36
    配置限定符名称   配置 限定符值 说明 MCC和MNC 例如: mcc310 mcc310-mnc004 mcc208-mnc00 等 MCC是移动国家代码的英文首字母缩写(The mobile country code),它的...
  • 云展网提供了书橱功能,方便用户通过...同步文件夹:勾选是否同步文件夹,选择是的情况下,当该文件夹有新的杂志会自动同步到书橱中,插入位置可以选择在书橱首位或者最后。 打开方式 细节阅读: 弹窗阅读:...
  • 手机上的直接加载到pc上就可以删除了  模拟器上面的可以用命令去删除 adb remount  adb shell cd sdcard  ls  rm -r (文件夹名称) 其实和LINUX一样
  • Android获取文件夹路径

    千次阅读 2017-12-11 13:17:50
    Android获取文件夹路径应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。 大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。 这样当该应用被卸载...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,716
精华内容 20,286
关键字:

如何编辑手机文件夹名称