android alias目录在哪,Android数据存储之文件操作

内部存储和外部存储

android的存储方式分为内部存储和外部存储,注意,内部存储不是内存,内部存储位于系统中很特殊的一个位置,默认是你应用程序的包名,(/data/data/包名 下),这个文件夹里面的数据默认只有你的应用可以访问到,当你的应用被卸载时,这和文件夹以及里面的所有文件也会被一起删除,最容易混淆的是外部存储,如果说pc上也要区分出外部存储和内部存储的话,那么自带的硬盘算是内部存储,U盘或者移动硬盘算是外部存储,因此我们很容易带着这样的理解去看待安卓手机,认为机身固有存储是内部存储,而扩展的T卡是外部存储。所有的安卓设备都有外部存储和内部存储,这两个名称来源于安卓的早期设备,那个时候的设备内部存储确实是固定的,而外部存储确实是可以像U盘一样移动的。但是在后来的设备中,很多中高端机器都将自己的机身存储扩展到了8G以上,他们将存储在概念上分成了"内部internal" 和"外部external" 两部分,但其实都在手机内部。所以不管安卓手机是否有可移动的sdcard,他们总是有外部存储和内部存储。最关键的是,我们都是通过相同的api来访问可移动的sdcard或者手机自带的存储(外部存储)。

由于内部存储空间是有限的,所以这个地方放置的都是一些经常被访问到的文件,Sqlite以及SharedPreferences的数据就存储在这里,这里也可以存储文件以及缓存文件,但是文件大小不能太大,不然占用系统空间,所以android系统一般在外部存储上也可以存储文件以及缓存文件,并且和内部存储一样,默认为应用程序的包名(Android/data/包名),这个文件夹存在于外部存储上,但是可以缓存大文件,同样,在应用程序卸载时,这里面的所有文件也是一同被删除

如果想让应用卸载以后,但是应该产生的数据不被删除,比如下载的视频,音乐等,那就在外部存储的根目录下创建一个文件夹,用于存储数据(应用卸载后依旧保留)

内部存储和外部存储的使用

获取存储空间的文件存放目录与缓存存放目录

内部存储

///data/data/com.jay.textproject/files

File filesDir = getFilesDir();

// /data/data/com.jay.textproject/cache

File cacheDir = getCacheDir();

外部存储

// /storage/emulated/0/Android/data/com.jay.textproject/files

File externalFilesDir = getExternalFilesDir(null);

// /storage/emulated/0/Android/data/com.jay.textproject/cache

File externalCacheDir = getExternalCacheDir();

上面四个函数获取的目录,在里面创建的文件,当应用卸载以后,里面的文件会被一同删除

例子:

File file = getFilesDir();

File out = new File(file.getPath(),"out.txt");

try {

FileWriter fileWriter = new FileWriter(out);

fileWriter.write("这是写在内部存储里面的数据,应用卸载后一同被删除");

fileWriter.close();

} catch (IOException e) {

e.printStackTrace();

}

与获取SharedPreferences类似,Context类提供了两个方法,可以直接读写内部存储中的文件(和上面的例子一样)

//打开文件获取数据流

abstract FileInputStream openFileInput(String name);

//往文件中写入数据

abstract FileOutputStream openFileOutput(String name,int mode);

外部存储上的文件操作

在使用外部存储的时候,需要判断外部存储的状态,因为可能由于某些原因,外部存储没有加载,或者外部存储不支持等,获取外部存储状态可以使用Environment的静态方法getExternalStorageState(),返回值为外部存储的状态

String state = Environment.getExternalStorageState();

be35824f5799c9557902cadc49e8b58b.png

例子

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

Log.v("state", "可以读写");

} else if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED_READ_ONLY)) {

Log.v("state", "只读");

} else {

Log.v("state", "外部存储不可使用");

}

获取外部存储根目录

File file = Environment.getExternalStorageDirectory();

例子:在外部存储上面创建一个文件夹(此文件夹不会随着应用的卸载而删除)

//判断外部存储可用代码略

File externalStorageDirectory = Environment.getExternalStorageDirectory();

File other = new File(externalStorageDirectory, "这是自定义文件夹");

if (!other.exists()) {

other.mkdirs();

}

获取外部存储上的特定文件夹

public static File getExternalStoragePublicDirectory (String type)

711ec2fcd1f647e0c7261bf8d24d1baf.png

File picFile = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值