android我爱编程

Android中的File

2018-05-27  本文已影响0人  s1991721

内部存储与外部存储

内部存储

用户无法在手机文件夹访问的目录 /data,此目录下常用的有(不同rom会有差异)

外部存储

用户通过手机文件夹访问的目录,如DCIM相册文件夹,Download下载文件的位置

外部存储包含出厂时自带的存储,也包含sdcard。

外部存储(除External获取的)的数据与app无关联性,知道具体路径便可访问。因此app创建的文件夹无法在app卸载时被删除。长此以往,除用户主动删除,外存的空间会逐渐减少。

获取

1、getCacheDir() ----> /data/data/package name/cache/
2、getFilesDir() ----> /data/data/package name/files/
3、getExternalCacheDir() ----> 外部存储路径/Android/data/package name/cache/
4、getExternalFilesDir() ----> 外部存储路径/Android/data/package name/files/
5、getExternalStorageDirectory() ----> 非scared路径的外部存储路径

1、2、3、4跟随app的包名创建的目录,清除缓存或卸载会将数据清除

1、2、3、4不需要申请权限,

3、4、5需要判断是否存在外置SD(以前需要判断scared是否已插入,但随着发展android机基本都挂有外部存储)

5、需要自己手动维护文件结构

6.0之后动态申请的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

文件操作

避免重复造轮子,取其我认为需要记录的内容
Java和Android文件操作

File(File dir, String name)
File(String path)
File(String dirPath, String name)
File(URI uri)
这些构造方法的实质都是一样的,就是构造一个File实例,必须提供一个完整的文件路径。
构造了一个File实例,并不是说就新建了一个文件或文件夹,这个File实例,只是实际系统内文件实体的一个代表。
重要方法:public boolean exists() 判断文件或文件夹是否存在

public boolean isFile() 判断是否为文件

public boolean isDirectory 判断是否为文件夹

public boolean createNewFile() 根据制定的路径和文件名创建一个新的,空的文件

public boolean mkdir() 根据制定的路径创建文件夹 (一级操作)

public boolean mkdirs() 根据制定的路径创建文件夹 (多级操作)

public boolean delete() 删除文件或文件夹

public boolean renameTo(File dest) 重命名文件或文件夹

public long length() 获得文件的长度,单位为 byte(文件夹不可用)

public String getName() 获得文件或文件夹的名字

public String getAbsolutePath() 获得文件或文件夹的绝对路径

pubic String getPath() 获得文件或文件夹的路径

public File[] listFiles() 返回文件夹内所有的File 对象

public String[] list() 返回文件夹内所有的文件或文件夹的名字

读写操作

Context已经实现了快捷方法:

public FileInputStream openFileInput(String name)
public FileOutputStream openFileOutput(String name, int mode)

查看源码会得知文件在getFilesDir()目录下。

模式:

以上文件操作模式均针对保存在手机自带存储空间的文件。若文件存储在SDCard上,则不受读写控制。

读写操作中有FileInputStream、FileOutputStream两个流,但实际java中的流有两类。

流.png

字节流:读取的数据以字节为单位(byte),8bit

字符流:读取的数据以字符为单位(char),16bit

上一篇下一篇

猜你喜欢

热点阅读