精华内容
下载资源
问答
  • 2021-12-14 16:52:23

    安卓手机QQ接收的文件存储路径在:
    Android>data>com.tencent.mobileqq>Tencent>QQfile_recv

    更多相关内容
  • Android系统数据存储分为内部存储和外部存储,内部存储手机系统自带的存储,一般空间都不大,外部存储一般是SD卡的存储,空间一般都比较大。一般我们会把存储内容放在外部存储空间里。在使用过程需要注意事项: 先...
  • 本文实例讲述了Android编程实现手机自带内部存储路径的获取方法。分享给大家供大家参考,具体如下: 我有一台中兴的Android手机,型号是 ZTE U930HD,手机没有插入外置SD卡(也就是Micro SD Card,原名Trans-flash ...
  • 博客地址:http://blog.csdn.net/lowprofile_coding/article/details/48269011 1.获取扩展存储设备 2.获取sdcard2外部存储空间 3.获取可用的 EMMC 内部存储空间 4.获取其他外部存储可用空间 5.获取内部存储目录
  • 写下来,省得以后不记得到处翻: ...= /mnt/sdcard/Android/data/com.my.app/files/test getExternalFilesDir(null) = /mnt/sdcard/Android/data/com.my.app/files getFilesDir() = /data/data/com.my.app/files 原文:...

    写下来,省得以后不记得到处翻:

    Environment.getDataDirectory() = /data

    Environment.getDownloadCacheDirectory() = /cache

    Environment.getExternalStorageDirectory() = /mnt/sdcard

    Environment.getExternalStoragePublicDirectory(“test”) = /mnt/sdcard/test

    Environment.getRootDirectory() = /system

    getPackageCodePath() = /data/app/com.my.app-1.apk

    getPackageResourcePath() = /data/app/com.my.app-1.apk

    getCacheDir() = /data/data/com.my.app/cache

    getDatabasePath(“test”) = /data/data/com.my.app/databases/test

    getDir(“test”, Context.MODE_PRIVATE) = /data/data/com.my.app/app_test

    getExternalCacheDir() = /mnt/sdcard/Android/data/com.my.app/cache

    getExternalFilesDir(“test”) = /mnt/sdcard/Android/data/com.my.app/files/test

    getExternalFilesDir(null) = /mnt/sdcard/Android/data/com.my.app/files

    getFilesDir() = /data/data/com.my.app/files

    原文:http://www.cnblogs.com/daishuguang/p/3885976.html

    展开全文
  • 对于很多做Android开发的同学来说,可能认为文件存储很简单,调用一些诸如getFilesDir,getExternalStorageDirectory方法行了,但是虽然说它们会调用相应的方法来实现简单的数据存储。但是他们未必就搞懂了他的数据...

    对于任何一个应用来说,无论是PC端应用还是Android应用,存储肯定是必不可少的。对于很多做Android开发的同学来说,可能认为文件存储很简单,调用一些诸如getFilesDir,getExternalStorageDirectory方法行了,但是虽然说它们会调用相应的方法来实现简单的数据存储。但是他们未必就搞懂了他的数据到底存在了哪里,以及他的数据是否存对了地方,或者是否做好了版本兼容。下面我将从这几个地方来解答大家常见的困惑。

    目录:

    Android中内部存储,外部存储的概念 ;
    getDataDirectory,getFilesDir,getCacheDir,getDir,getExternalStorageDirectory,getExternalStoragePublicDirectory,getExternalFilesDir,getExternalCacheDir,getExternalCacheDir,getRootDirectory等方法区别联系 。
    清除数据和清除缓存到底清除了什么数据 ;
    /storage/sdcard,/sdcard,/mnt/sdcard,/storage/emulated/0之间的关系 ;
    一张图看懂Ram,Rom,以及扩展存储(TF卡)的区别;内部存储,外部存储的区别。

    一、Android中内部存储,外部存储的概念

    (1)内部存储

    概念:注意内部存储不是内存。内部存储位于系统中很特殊的一个位置,如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。当一个应用卸载之后,内部存储中的这些文件也被删除。从技术上来讲如果你在创建内部存储文件的时候将文件属性设置成可读,其他app能够访问自己应用的数据,前提是他知道你这个应用的包名,如果一个文件的属性是私有(private),那么即使知道包名其他应用也无法访问。 内部存储空间十分有限,因而显得可贵,另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机也就无法使用了。所以对于内部存储空间,我们要尽量避免使用。Shared Preferences和SQLite数据库都是存储在内部存储空间上的。内部存储一般用Context来获取和操作。

    访问内部存储的API方法:

    1、Environment.getDataDirectory()
    2、getFilesDir().getAbsolutePath()
    3、getCacheDir().getAbsolutePath()

    4、getDir(“myFile”, MODE_PRIVATE).getAbsolutePath()

    (2)外部存储

    概念:最容易混淆的是外部存储,因为老的Android系统的跟新的Android系统是有差别的,很多人去网上查找资料,看了一下以前的资料,又看了一下现在的资料,但是发现它们说法不一样然后就困惑了。首先说一个大家普遍的概念“如果在pc机上是区分外部存储和内部存储的话,那么电脑自带的硬盘算是内部存储,U盘或者移动硬盘就是外部存储了。”因此很多人带着这样的理解去看待安卓手机,把内置存储(机身存储)当做内部存储,而把扩展的SD卡当做是外部存储。这么认为确实没错,因为在4.4(API19)以前的手机上确实是这样的,手机自身带的存储卡就是内部存储,而扩展的SD卡就是外部存储。但是从4.4的系统开始,很多的中高端机器都将自己的机身存储扩展到了8G以上,比如有的人的手机是16G的,有的人的手机是32G的,但是这个16G,32G是内部存储吗,不是的!!!,它们依然是外部存储,也就是说4.4系统及以上的手机将机身存储存储(手机自身带的存储叫做机身存储)在概念上分成了”内部存储internal” 和”外部存储external” 两部分。既然16G,32G是外部存储,那有人又有疑惑了,那4.4系统及以上的手机要是插了SD卡呢,SD卡又是什么呢,如果SD卡也是外部存储的话,那怎么区分机身存储的外部存储跟SD卡的外部存储呢?对,SD卡也是外部存储,那怎么区分呢,在4.4以后的系统中,API提供了这样一个方法来遍历手机的外部存储路径:

    File[] files;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

    files = getExternalFilesDirs(Environment.MEDIA_MOUNTED);

    for(File file:files){

    Log.e(“main”,file);

    }

    }

    如果你的手机插了SD卡的话,那么它打印的路径就有两条了,例如我的华为荣耀7插了SD卡,它的结果如下:

    /storage/emulated/0/Android/data/packname/files/mounted
    /storage/B3E4-1711/Android/data/packname/files/mounted
    其中/storage/emulated/0目录就是机身存储的外部存储路径
    而/storage/B3E4-1711/就是SD卡的路径
    他们统称为外部存储
    访问外部存储的API方法:
    1、Environment.getExternalStorageDirectory().getAbsolutePath()
    2、Environment.getExternalStoragePublicDirectory(“”).getAbsolutePath()
    3、getExternalFilesDir(“”).getAbsolutePath()
    4、getExternalCacheDir().getAbsolutePath()

    大家对Android的外部存储会产生疑问,主要是现在很多的手机已经从物理上看不到外部存储了,以前的手机都有,就是那种黑色的内存卡,8G,16G,32G的,可以像U盘一样插拔,以前很流行,存储空间不够了,就去买个内存卡(准确说是SD卡,说成内存卡又会引起误解)回来,后来的手机比如现在我用的华为荣耀7,厂家已经把机身存储扩展到了16G了,只是在存储概念上了分为了内部存储(内部internal)和外部存储(外部external),其实它们都集成在一起了。当然如果你觉得16G不够用,那他支持通过插SD卡来扩充容量吗?支持的,荣耀7为例,它是三合二卡槽。卡槽1:Nano SIM卡;卡槽2:Nano SIM卡或Micro SD卡。默认卡槽1为4G主卡,可以在设置中更改4G主卡卡槽;不支持热插拔,插拔卡托后需重启手机。这样插入的SD卡也属于外部存储。所以手机的外部存储可能包含两部分,一是机身存储的外部存储部分,还有一个是SD卡部分。

    二、getDataDirectory,getFilesDir,getCacheDir,getDir,getExternalStorageDirectory,getExternalStoragePublicDirectory,getExternalFilesDir,getExternalCacheDir,getExternalCacheDir,getRootDirectory的区别和联系

    上面这些方法,我们可能似曾相识,但是对于有些同学来说却又很难分清出,主要还是不同的Android版本的问题。为了方便大家理解,我先简要介绍以上各个方法,为方便大家理解我把这些方法的结果打印出来(以下的打印结果是基于荣耀7的(系统版本6.0):
    1、Environment.getDataDirectory() = /data
    这个方法是获取内部存储的根路径
    2、getFilesDir().getAbsolutePath() = /data/user/0/packname/files
    这个方法是获取某个应用在内部存储中的files路径
    3、getCacheDir().getAbsolutePath() = /data/user/0/packname/cache
    这个方法是获取某个应用在内部存储中的cache路径
    4、getDir(“myFile”, MODE_PRIVATE).getAbsolutePath() = /data/user/0/packname/app_myFile
    这个方法是获取某个应用在内部存储中的自定义路径
    方法2,3,4的路径中都带有包名,说明他们是属于某个应用
    …………………………………………………………………………………………
    5、Environment.getExternalStorageDirectory().getAbsolutePath() = /storage/emulated/0
    这个方法是获取外部存储的根路径
    6、Environment.getExternalStoragePublicDirectory(“”).getAbsolutePath() = /storage/emulated/0
    这个方法是获取外部存储的根路径
    7、getExternalFilesDir(“”).getAbsolutePath() = /storage/emulated/0/Android/data/packname/files
    这个方法是获取某个应用在外部存储中的files路径
    8、getExternalCacheDir().getAbsolutePath() = /storage/emulated/0/Android/data/packname/cache
    这个方法是获取某个应用在外部存储中的cache路径

    注意:其中方法7和方法8如果在4.4以前的系统中getExternalFilesDir(“”)和getExternalCacheDir()将返回null,如果是4.4及以上的系统才会返回上面的结果,也即4.4以前的系统没插SD卡的话,就没有外部存储,它的SD卡就等于外部存储;而4.4及以后的系统外部存储包括两部分,getExternalFilesDir(“”)和getExternalCacheDir()获取的是机身存储的外部存储部分,也即4.4及以后的系统你不插SD卡,它也有外部存储,既然getExternalFilesDir(“”)和getExternalCacheDir()获取的是机身存储的外部存储部分,那么怎么获取SD卡的存储路径呢,还是通过上面提到的getExternalFilesDirs(Environment.MEDIA_MOUNTED)方法来获取了,不知道Android有没有提供相关的API接口来获取SD卡的存储路径,大家可以去查资料。又重复了上面的话,主要是提醒大家要注意不同的Android版本是有差别的,这个最坑了。

    …………………………………………………………………………………………
    Environment.getDownloadCacheDirectory() = /cache
    Environment.getRootDirectory() = /system
    这两个方法没什么说的了,每个版本的android系统都一样
    …………………………………………………………………………………………
    从上面我们很清楚的可以看到上面的方法可以分为三类,我用横线隔开了。第一类是位于根目录/data下;还有一类是位于根目录/storage下,可以看到调用它们的API方法都带了一个External;另外一类不在/data下也不再/storage下,比如系统文件/system,或者缓存文件/cache。
    /data目录下的文件物理上存放在我们通常所说的内部存储里面
    /storage目录下的文件物理上存放在我们通常所说的外部存储里面
    /system用于存放系统文件,/cache用于存放一些缓存文件,物理上它们也是存放在内部存储里面的

    下面来看一下大家常见的疑问

    疑问1、那getFilesDir().getAbsolutePath()和getCacheDir().getAbsolutePath()有什么区别呢?
    其实是没有什么区别的,我们可以看下面一张图:
    这里写图片描述
    getFilesDir获取的是files目录,getCacheDir获取的是cache目录,它们位于同一级目录,只是为了用来存放不同类型的数据的,由文件名不难看出:cache下存放缓存数据,databases下存放使用SQLite存储的数据,files下存放普通数据(log数据,json型数据等),shared_prefs下存放使用SharedPreference存放的数据。这些文件夹都是由系统创建的。

    疑问2、getFilesDir().getAbsolutePath()和getExternalFilesDir(“”).getAbsolutePath()有什么区别呢?

    我们先看它们的路径:
    /data/user/0/packname/files
    /storage/emulated/0/Android/data/packname/files
    很显然这两个的区别是一个在内部存储里面,一个在外部存储里面,这是它们的区别。它们的共同点呢,就是它们的路径都带有包名,表明是这个APP的专属文件,这类文件应该是随着app卸载而一起被删除的,并且我们在设置里面清除该应用的数据时,这两个文件夹下的数据都会被清除。
    疑问3、什么是APP专属文件?
    上面疑问2我们提到了专属文件,所谓专属文件就是它是属于某个具体的应用的,他的文件路径都带有相应的包名,当APP卸载时,它们会随应用一起删除,当我们在设置里面手动清除某个应用数据时(不是清除缓存),它们也会一起被清掉。Android使用这种专属文件的目的就是为了方便文件管理,避免文件随意存储,显得很乱,另一个目的就是为了当应用被卸载时不会留下很多垃圾文件。
    疑问4、既然内部存储与外部存储都有APP专属文件,那么我们该使用哪个呢?

    内部存储与外部存储都有APP专属文件,我们该用哪个呢,很显然应该用外部存储的,因为内部存储本身就比较小,而且已经存储了一些系统的文件,因此内部存储我们尽量不要去使用。但是当手机没有外部存储时,我们还是得使用内部存储,一般程序员会做判断是否有外部存储,没有再使用内部存储,代码如下:

    public static String getFilePath(Context context,String dir) {

    String directoryPath="";

    if (MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ) {//判断外部存储是否可用

    directoryPath =context.getExternalFilesDir(dir).getAbsolutePath();

    }else{//没外部存储就使用内部存储

    directoryPath=context.getFilesDir()+File.separator+dir;

    }

    File file = new File(directoryPath);

    if(!file.exists()){//判断文件目录是否存在

    file.mkdirs();

    }

    return directoryPath;

    }

    为了让大家更好地理解不同版本的Android系统的存储差异我做了下列一份说明表:

    比较的是我向getFilesDir().getAbsolutePath()路径下和getExternalFilesDir(“”).getAbsolutePath()路径各写入19.48M数据前后的差别
    表一、4.1.1系统,带有SD卡 (真机)

    存储位置 获取路径的方法 容量(写入前) 容量(写入后) 备注
    /data/data/packname/files getFilesDir() 1.59GB 1.57GB 内部存储
    /storage/sdcard0/Android
    /data/packname/files getExternal
    StorageDirectory() 1.47GB 1.45GB 外部存储(SD卡)
    表二、4.1.1系统,不带有SD卡 (真机)

    存储位置 获取路径的方法 容量(写入前) 容量(写入后) 备注
    /data/data/packname/files getFilesDir() 1.59GB 1.47GB 内部存储
    路径不存在 getExternal
    StorageDirectory() ~~~ ~~~ 没插SD卡
    表三、4.2.1系统,带有SD卡 (模拟器)

    存储位置 获取路径的方法 容量(写入前) 容量(写入后) 备注
    /data/data/packname/files getFilesDir() 1.85GB 1.83GB 内部存储
    /mnt/sdcard/Android
    /data/packname/files getExternal
    StorageDirectory() 98.42MB 78.93MB 外部存储(SD卡)
    表四、4.4.2系统,带有SD卡 (真机)

    存储位置 获取路径的方法 容量(写入前) 容量(写入后) 备注
    /data/data/packname/files getFilesDir() 2.22GB 2.18GB 内部存储
    /storage/emulated/0/Android
    /data/packname/files getExternal
    StorageDirectory() 2.20GB 2.16GB 机身外部存储
    /storage/sdcard1 getExternalFilesDirs 1.47GB 1.47GB 外部存储(SD卡
    没有向其写数据,只是读取)
    表五、4.4.2系统,不带有SD卡 (真机)

    存储位置 获取路径的方法 容量(写入前) 容量(写入后) 备注
    /data/data/packname/files getFilesDir() 2.22GB 2.18GB 内部存储
    /storage/emulated/0/Android
    /data/packname/files getExternal
    StorageDirectory() 2.20GB 2.16GB 机身外部存储
    表六、6.0.0系统,带有SD卡 (真机)

    存储位置 获取路径的方法 容量(写入前) 容量(写入后) 备注
    /data/user/0/packname/files getFilesDir() 11.94GB 11.90GB 内部存储
    /storage/emulated/0/Android
    /data/packname/files getExternal
    StorageDirectory() 11.92GB 11.88GB 机身外部存储
    /storage/B3E4-1711 getExternalFilesDirs 1.47GB 1.47GB 外部存储(SD卡)
    没有向其写数据,只是读取
    表七、6.0.0系统,不带有SD卡 (真机)

    存储位置 获取路径的方法 容量(写入前) /storage/容量(写入后) 备注
    /data/user/0/packname/files getFilesDir() 11.93GB 11.89GB 内部存储
    /storage/emulated/0/Android
    /data/packname/files getExternal
    StorageDirectory() 11.91GB 11.87GB 机身外部存储
    注:上述容量指的是该路径所在根路径的可用容量,比如/data/data/packname/files的容量是指/data的可用容量,/storage/sdcard0/Android/data/packname/files指的是/storage/sdcard0的可用容量,而一般在4.4及以上的系统中,我们很少操作SD

    三、清除数据和清除缓存到底清除了什么数据

    这个很容易搞混,为什么呢?通过上面我们知道:
    /data/user/0/packname/files它是用来存储普通数据的
    /data/user/0/packname/cache它是用来存储缓存数据的
    所以很多人就以为我清除数据时清除的肯定就是files下的数据,而我清除缓存数据时清除的肯定就是cache下的数据,但是事实却不是这样的。正确应该是:
    清除缓存:我们知道应用程序在运行过程中需要经过很多过程,比如读入程序,计算,输入输出等等,这些过程中肯定会产生很多的数据,它们在内存中,以供程序运行时调用。所以清除缓存清除的是APP运行过程中所产生的临时数据。
    清除数据:清除数据才是真正的删除了我们保存在文件中的数据(永久性数据,如果不人为删除的话会一直保存在文件中)例如当我们在设置里面清除了某个应用的数据,那么/data/user/0/packname/和/storage/emulated/0/Android/data/packname/下的文件里面的数据会全部删除,包括cache,files,lib,shared_prefs等等。

    四、/storage/sdcard,/sdcard,/mnt/sdcard,/storage/emulated/0之间的关系

    从上面的表中我们可以发现,在4.1系统中,getExternalStorageDirectory方法获取到的路径为/storage/sdcard0;4.2系统中getExternalStorageDirectory方法获取到的路径为/mnt/sdcard,因为4.2是模拟器打印的结果,如果是真机的话也是/storage/sdcard0;4.4的getExternalStorageDirectory方法获取到的路径为/storage/emulated/0,它的SD卡存储路径为/storage/sdcard1;6.0的getExternalStorageDirectory方法获取到的路径为/storage/emulated/0,它的SD卡存储路径为/storage/B3E4-1711;另外根据测试在4.0上getExternalStorageDirectory方法获取到的路径为/mnt/sdcard。所以在真机上,getExternalStorageDirectory获取到的路径如下表所示:

    系统版本 结果
    4.0 /mnt/sdcard
    4.1 /storage/sdcard0
    4.2 /storage/sdcard0
    4.4 /storage/emulated/0
    6.0 /storage/emulated/0
    要理解/storage/sdcard,/sdcard,/mnt/sdcard,/storage/emulated/0之间的关系,我们需要先要了解一下linux文件挂载的概念,关于挂载大家可以自行去百度。还有我们不明白为什么会有有/storage/sdcard,/sdcard,/mnt/sdcard,/storage/emulated/0这么多目录,让人看起来眼花缭乱,要详细了解请仔细看下面的文章,下面的文章是我摘自关于android的4.2的0文件夹的详解
    —- android 4.0 —-
    在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd卡上,然而gn是没有sd卡的,所以google想了一个办法,就是虚拟一个。
    所以,在userdata分区下有个目录叫media,是内置sd卡的数据存储位置,使用fuse技术将/data/media虚拟成为一个叫做/dev/fuse的设备,为了让程序能认出来,被同时挂载在 /mnt/sdcard 目录,又为了兼容以前的程序,做了一个快捷方式(linux系统里叫软连接) /sdcard 指向的是 /mnt/sdcard .
    当然,这些都是4.0的做法。
    —- android 4.1 —-
    在4.1里,同样也会使用fuse技术,/dev/fuse 会被同时挂载到/storage/sdcard0 目录,这个sdcard0表示第一个sd卡(如果有外置sd卡,那会多一个 /storage/sdcard1,比如我的xoom), /sdcard 软连接会指向 /storage/sdcard0 ,此时/mnt/sdcard 也是个软连接,会指向/storage/sdcard0。
    如果你通过otg线接U盘,会被挂载到 /storage/usb0目录,stickmount这个软件为了让图库、快图、mx player等软件,能看到u盘里的数据,又同时挂载到 /storage/sdcard0/usStorage/sda1.
    也许你会问,为什么不是usb0,而是sda1,这是linux的对硬盘的命名方式,如果你的u盘有多个分区,就分别是sda1,sda2这样一直排下去了。
    —- android 4.2 —-
    好了,我们开始说4.2系统。
    谷歌是不是没事干啊,非要给android搞个多用户,你想想啊,在中国,可能因为经济问题,家里不是每人一个电脑,在美国,几乎需要用电脑的人,都会自己有一台或多台,一台电脑多人用的情况少之又少,这就是为什么叫PC了,顾名思义,个人电脑。像手机和平板这些东西,更加私人化了,很少公用了吧,我想在中国也是如此吧。
    当然,谷歌也不完全是抽风,因为他有更大的战略部署,而且平板也的确有多人用的可能。
    所以谷歌搞出来一个多用户,那每个人的应用、数据、个性配置都要分开吧。 应用和个性配置好弄,想想啊,通过权限控制,每人只能看自己的应用就行了,桌面也可以用自己的。
    那数据怎么办????
    好吧,调整用户数据的挂载结构。android 4.2,同样也会使用fuse技术/dev/fuse 会被挂载到/storage/emulated/0 目录,为什么是0呢,你还记得上边的sdcard0吧,第一个的意思。(如果有第二个,应该就是/storage/emulated/1,我们的三儿子没有外置sd卡,所以没法验证)
    为了兼容以前,同时挂载到 /storage/emulated/legacy (故名思议,传统的),还建立三个软连接 /storage/sdcard0 ,/sdcard,/mnt/sdcard ,都指向 /storage/emulated/legacy
    很多同学可能不会认真看上面,这里我就简单总结一下:
    1、其中sdcard/、mnt/sdcard、storage/sdcard0、storage/emulated/0、storage/emulated/legacy都是同一个路径的不同”指针“,指向的是同一个地方,只是不同Android版本的叫法不一样。
    2、如果大家想了解每个版本的外部存储路径,同学们可以通过获取getExternalStorageDirectory方法的打印结果进行对比

    五、一张图看懂Ram,Rom,以及扩展存储(TF卡)的区别;内部存储,外部存储的区别。

    这里写图片描述
    1、首先我们来弄清几个概念,内存,内部存储,外部存储,机身存储(内置存储)。
    1.1内存;我们在英文中称作memory,内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,所以说它是用于计算机运行时的,它不是用来存储数据的。
    1.2内部存储,外部存储;内部存储我们称为InternalStorage,外部我们称为ExternalStorage,这两个概念来自于早期的Android智能机,4.4以前,内置存储就是内部存储,外置SD卡就是外置存储。我们通过getDataDirectory就可以获取内置存储根路径,通过getExternalStorageDirectory就可以获取外置SD卡根路径。4.4以后外部存储就包含两部分了,其中通过getExternalStorageDirectory获取的是机身存储的外部存储,而外置SD卡我们则需要通过getExternalDirs遍历来获取了。
    1.3机身存储;机身存储是指手机自身携带的存储空间,出厂时就已经有了,4.4以前机身存储就是内部存储,4.4及以后机身存储包含了内部存储和外部存储。
    2、Ram,Rom,以及扩展存储(TF卡)的概念。从图中我们可以看到,一个手机里面有内存,手机内置存储,以及SD卡, 它们分别是Ram,Rom,以及TF卡,这三种卡的性能,材质及价格都不一样,都有各自的用处。
    3、内部存储,外部存储的概念。很多人对这个存在误解,认为机身存储就是内存,而SD卡才叫外部存储,这其实是不对的,不同的Android版本是有差别的,请看第1条。

    展开全文
  • Android手机自带内部存储路径的获取

    千次阅读 2021-01-17 16:07:50
    我有一台中兴的Android手机,型号是 ZTE U930HD,手机没有插入外置SD卡(也就是Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card),但是机身自带了一个内置存储卡(也就是eMMC存储,大小为...

    我有一台中兴的Android手机,型号是 ZTE U930HD,手机没有插入外置SD卡(也就是Micro SD Card,原名Trans-flash Card(TF卡),2004年正式更名为Micro SD Card),但是机身自带了一个内置存储卡(也就是eMMC存储,大小为2G)。

    我把这个手机用数据线插到电脑上,也会看到盘符,通过安装「R.E 管理器」等文件管理应用,也可以管理文件,并且能看到该存储的挂载目录是:/mnt/sdcard2

    但是,

    我打印 Environment.getExternalStorageState(),却返回 ”removed“;

    这是怎么回事?明明手机本身带着内置SD卡,却为何提示这么一个信息?

    我又试着去打印了Environment.getExternalStorageDirectory(),返回:“/mnt/sdcard”

    看起来可以解释了,在我这个中兴手机上,调用Environment.getExternalStorageDirectory(),返回的存储目录并不是系统内置的SD卡目录。

    我又换了一个 Sony L39u,一个 MOTO G,调用Environment.getExternalStorageDirectory()返回的目录就是系统内置的SD卡目录。

    不同的设备上,调用getExternalStorageDirectory()返回值却不一样。查询了Android的文档,才找到原因,原来这个方法返回的是当前设备厂商所认为的“外部存储”,有可能返回外置的SD卡目录(Micro SD Card),也可能返回内置的存储目(eMMC)。

    总结一下:

    一部分手机将eMMC存储挂载到 /mnt/external_sd 、/mnt/sdcard2 等节点,而将外置的SD卡挂载到 Environment.getExternalStorageDirectory()这个结点。

    此时,调用Environment.getExternalStorageDirectory(),则返回外置的SD的路径。

    而另一部分手机直接将eMMC存储挂载在Environment.getExternalStorageDirectory()这个节点,而将真正的外置SD卡挂载到/mnt/external_sd、/mnt/sdcard2 等节点。

    此时,调用Environment.getExternalStorageDirectory(),则返回内置的SD的路径。

    至此就能解释为都是无外置SD卡的情况下,在中兴手机上,调用

    打印 Environment.getExternalStorageState(),却返回 ”removed“,在索尼、MOTO G上就返回:“mounted”

    原因已经知道了,可是如何在无外置SD卡的时候,获取到这个内置eMMC存储的具体路径呢?

    比如,我这个中兴手机,既然使用 Environment.getExternalStorageDirectory() 获取到的是外置SD卡路径,但是我又没有插入SD卡,这个时候我想使用内置的eMMC存储来存储一些程序中用到的数据,我怎么去获取这个eMMC存储的路径呢?

    答案是:通过扫描系统文件"system/etc/vold.fstab”来实现。

    "system/etc/vold.fstab” 只是一个简单的配置文件,它描述了Android的挂载点信息。

    我们可以遍历这个文件来获取所有的挂载点:

    /**

    * 遍历 "system/etc/vold.fstab” 文件,获取全部的Android的挂载点信息

    *

    * @return

    */

    private static ArrayList getDevMountList() {

    String[] toSearch = FileUtils.readFile("/etc/vold.fstab").split(" ");

    ArrayList out = new ArrayList();

    for (int i = 0; i 

    if (toSearch[i].contains("dev_mount")) {

    if (new File(toSearch[i + 2]).exists()) {

    out.add(toSearch[i + 2]);

    }

    }

    }

    return out;

    }

    之后,当 Environment.getExternalStorageState()返回“removed”的时候(即,当没有挂载外置SD卡的时候),通过getDevMountList()方法获取一个list,这个list中可以进行写操作的那个就是系统自带的eMMC存储目录了。

    判断逻辑:

    /**

    * 获取扩展SD卡存储目录

    *

    * 如果有外接的SD卡,并且已挂载,则返回这个外置SD卡目录

    * 否则:返回内置SD卡目录

    *

    * @return

    */

    public static String getExternalSdCardPath() {

    if (SDCardUtils.isMounted()) {

    File sdCardFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath());

    return sdCardFile.getAbsolutePath();

    }

    String path = null;

    File sdCardFile = null;

    ArrayList devMountList = getDevMountList();

    for (String devMount : devMountList) {

    File file = new File(devMount);

    if (file.isDirectory() && file.canWrite()) {

    path = file.getAbsolutePath();

    String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss").format(new Date());

    File testWritable = new File(path, "test_" + timeStamp);

    if (testWritable.mkdirs()) {

    testWritable.delete();

    } else {

    path = null;

    }

    }

    }

    if (path != null) {

    sdCardFile = new File(path);

    return sdCardFile.getAbsolutePath();

    }

    return null;

    }

    展开全文
  • android存储路径详解

    千次阅读 2021-04-20 17:52:04
    前两天因为开发一个app更新的功能,我将从服务器下载的apk文件放在了内部存储目录(测试手机为小米,路径为:data/user/0/packagename/files)下面,然后安装的时候一直安装不了,提示解析包出错。后来查询发现,...
  • 一、获取设备存储路径  Android手机存储分为两个部分:内部存储和外部存储,内部存储一般是手机自带的存储空间,外部存储指外插SD卡提供的存储空间;随着手机发展,这两个存储的定义又有了一些些变化,新的手机不再...
  • Android手机存储分类 二,内部存储 三,外部存储 私有目录 公有目录 四,数据删除 五,权限相关 android手机存储分类 分为:内部存储和外部存储 如何区分内部存储和外部存储:可以从物理和逻辑区分 从...
  • 前言:在Android中,你是不是只会在根目录下存文件?靠着一行代码走天下:String absolutePath ...接上篇https://www.jianshu.com/p/c04b8899cf85《Android中的存储路径之内部存储》上篇中,我们详细介绍了Android中...
  • Android 存储路径选择方法

    千次阅读 2021-06-02 15:16:58
    Android能用来存储的地方有两个,一个是手机内置的存储空间,一个是外置的SD卡,内置的存储空间一般比较小,所以应用的缓存建议存储在外置的SD卡中。在Android系统中如何获得存储路径呢?public static void ...
  • Android 存储路径及获取方式

    千次阅读 2022-02-18 10:15:51
    Android 存储路径获取
  • app需要播放安卓平板中的视频文件。 在mainactivity中获取指定文件夹中的所有文件地址。 try { string filepath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/hcvideo"; ...
  • Android不需要文件存储权限将文件保存至手机Android不需要文件存储权限将文件保存至手机
  • 前言查了很多资料,最终归结为如下内容1.资料参考2.概念的认识内部存储:内部存储不同于内存,与应用有关联的...外部存储:外部存储分为手机在4.4(API19)以前的手机上,手机自身带的存储卡就是内部存储,而扩展的S...
  • Android 文件存储路径-内部/外部存储

    千次阅读 2021-06-06 06:17:41
    我们通过getDataDirectory就可以获取内部存储路径,通过getExternalStorageDirectory就可以获取外置SD卡根路径。4.4以上,机身存储包含内部存储和内置的外部存储,外部存储包含两部分内置的外部存储和SD卡,其中...
  • android获取文件内部存储路径

    千次阅读 2018-03-29 22:53:18
    一.getCacheDir、getCacheDir getCacheDir()方法用于获取/data/data//cache目录 getFilesDir()方法用于获取/data/...  应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。大部分...
  • Android 10以上获取存储路径的方式

    千次阅读 2022-02-24 10:05:51
    存储路径
  • android手机存储文件是我们每个手机用户必不可少的功能,而对于开发者而言,熟练的操作各个文件,这样对于我们开发有很大帮助,下面androidkaifa.com就介绍一个android API文件为我们提供的那些获取文件路径的...
  • 开发过程中碰到手机拍照录像获取文件问题,这里做一个记录 import android.content.ContentUris; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os....
  • 详解Android文件存储

    2021-01-21 19:54:11
    其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理。根据我的经验,初学者在这部分感到很...
  • Android文件存储路径

    2018-04-08 16:57:40
    一、最佳方案Google提供了最佳的文件存储方案:通过context.getExternalFilesDir(dir)获取外部存储路径,通过context.getFilesDir()获取内部存储路径;通过context.getExternalCacheDir(dir)获取外部缓存路径,通过...
  • 一、前言:Android 中获取本地储存路径,有四个方法,getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()。接下来介绍下每个方法的特点以及路径地址getCacheDir():/data/data/你的应用的...
  • 可以在两者之间来回切换,经过一系列测试发现,现在的很多手机厂家定制的手机内存和sd卡内存的路径都不同,用android系统自带的api无法准确获取区分sd卡和手机自身的准确路径,比如再一台手机上获取的手机路径是/...
  • 华为手机下载文件路径如下:;1。如果您是8.0.3.304之前的版本:;a.请转到“文件管理>分类>下载和收集”并搜索相应的第三方应用程序。;B.对于通过浏览器下载的文件,请进入“本地&gt内部存储”,输入...
  • Android 文件存放路径和读取方式

    千次阅读 2021-06-02 17:56:02
    getExternalFilesDir();Environment.getExternalStorageState()...对于assets目录下的静态数据,存在当文件最大支持1MB的局限,读取方式如下:InputStreamis=getAssets().open("xxx.xx");对于res,raw目录下的文件,...
  • 彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑_ 雨季莫忧离的博客-CSDN博客 彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑_ 雨季莫忧离的博客-CSDN博客 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,145
精华内容 14,458
关键字:

安卓手机文件存储路径