Android File(一) 存储以及File操作介绍

来源:互联网 发布:如何找到淘宝上的假货 编辑:程序博客网 时间:2024/06/15 19:47

    在开发中,我们或多或少都会使用到File操作,例如,下载图片、资源包、apk等等。那么接下来,我们就看看有关File的一些具体操作。

一.存储说明。

1.在Android中,我们保存数据到手机上,基本上有两种选择,一种是手机内部存储,另一种是外部存储。

(1).手机内部存储(ROM),并不是我们平时所说的手机内存(RAM),它比手机内存要大很多,手机内部存储是手机制造商在手机出厂时,已经确定好的,一旦出厂时无法改变的,例如,介绍手机的时候说16G,32G就是这个内部存储大小(当我们打开手机查看可用空间时,会发现少了几个G,这是因为系统以及其他资源占用了)。我们比较熟悉的目录是,目录1-‘/data/data/应用程序包名’(要看到该目录,手机需要root),手机app的Sqlite数据库、Shared Preferences、WebView的缓存等都是在该目录中,该目录是系统目录,每当有应用安装后,便会在该目录中创建相应的数据。由于内部存储的大小是确定的,所以,我们在使用时避免在内部存储中大量存储数据。

(2).外部存储,就是我们经常说的,可扩展的存储,例如SD卡、TF卡、TS卡。我们可以在外部存储中,存储各种数据,只要我们的外部存储够大。但是,外部存储不太稳定,当你挂载的时候,可能就用不了了,或者其他原因,总之外部存储在使用前,需要判断外部存储的状态是否可用。我们所熟知的外部存储目录,目录2-‘/sdcard/Android/data/应用程序包名’,该目录是系统创建的,谷歌建议,我们在外部存储时,最好能在该目录下存储。因为当我们在卸载某个应用时,默认情况下,目录1和目录2底下的数据才会自动清除,在其他地方创建的文件或者文件夹,需要手动清除才可以。当然,外部存储对数据的保护较少,所以,建议一些重要的、敏感的数据不应该保存到外部存储中。如果这些数据加密的话,可以选择保存在外部存储。

二.File操作。

1.常用方法。

//建立文件File.createNewFile();//建立文件夹 File.mkDir(); //判断是否是文件File.isFile();//判断是否是文件夹 File.isDirectory(); //列出文件夹下的所有文件和文件夹名File[] files = File.listFiles();   //重命名文件或文件夹  File.renameTo(dest);  //删除文件夹或文件File.delete(); //获得文件或文件夹的名称   String Name = File.getName(); //获得文件或文件夹的父目录  String parentPath = File.getParent();  //获得文件或文件夹的绝对路经 String path = File.getAbsoultePath(); //获得文件或文件夹的路经String path = File.getPath();//获得sd卡根目录File skRoot = Environment.getExternalStorageDirectory();

2.其他常用方法。

 /** * 判断SD卡是否被挂载 *  * @return */public static boolean isSDCardMounted() {return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);}/** * 获取SD卡的根目录 *  * @return */public static String getSDCardBaseDir() {if (isSDCardMounted()) {return Environment.getExternalStorageDirectory().getAbsolutePath();}return null;}/** * 获取sd卡的大小 *  * @return */@SuppressWarnings("deprecation")public static long getSDAllSizeKB() {if (isSDCardMounted()) {// get path of sdcardFile path = Environment.getExternalStorageDirectory();StatFs sf = new StatFs(path.getPath());// get single block size(Byte)long blockSize = sf.getBlockSize();// 获取所有数据块数long allBlocks = sf.getBlockCount();// 返回SD卡大小return (allBlocks * blockSize) / 1024; // KB}return 0;}/** * 获取sd卡可用大小 *  * @return */@SuppressWarnings("deprecation")public static long getSDAvalibleSizeKB() {if (isSDCardMounted()) {File path = Environment.getExternalStorageDirectory();StatFs sf = new StatFs(path.getPath());long blockSize = sf.getBlockSize();long avaliableSize = sf.getAvailableBlocks();return (avaliableSize * blockSize) / 1024;// KB}return 0;}/** * 获取文件或文件夹的大小 *  * @param path *            文件或文件夹的路径 * @return */public static long getFileSize(String path) {return getFileSize(new File(path));}/** * 获取文件或文件夹的大小 *  * @param file *            文件或文件夹 * @return */public static long getFileSize(File file) {if (file.exists()) {if (file.isDirectory()) {long size = 0;for (File subFile : file.listFiles()) {size += getFileSize(subFile);}return size;} else {return file.length();}} else {throw new IllegalArgumentException("File does not exist!");}}/** * 删除文件或文件夹 *  * @param path *            文件或文件夹的路径 */public static void deleteFile(String path) {deleteFile(new File(path));}/** * 删除文件或文件夹 *  * @param file *            文件或文件夹 */public static void deleteFile(File file) {if (!file.exists()) {Log.d("The file to be deleted does not exist! File's path is: ",file.getPath());} else {deleteFileRecursively(file);}}/** * 删除文件或文件夹 *  * @param file *            文件或文件夹 */private static void deleteFileRecursively(File file) {if (file.isDirectory()) {for (String fileName : file.list()) {File item = new File(file, fileName);if (item.isDirectory()) {deleteFileRecursively(item);} else {if (!item.delete()) {Log.d("Failed in recursively deleting a file, file's path is: ",item.getPath());}}}if (!file.delete()) {Log.d("Failed in recursively deleting a directory, directories' path is: ",file.getPath());}} else {if (!file.delete()) {Log.d("Failed in deleting this file, its path is: ",file.getPath());}}}

PS:在操作SD卡时,记得在AndroidManifest.xml加入以下权限

<!--在SDCard中创建与删除文件权限 --><uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><!--往SDCard写入数据权限 --><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

三.总结

   在File操作中,我们需要注意的是,操作完成后,File是否还需要,如果不需要,那么就立刻删除掉,这样也许你的应用会更受欢迎!在 Android File(二) File下载以及解压,这篇文章中我们介绍了有关下载压缩包以及解压。

PS:

Context.getExternalCacheDir().getPath(); 获取到的是 /sdcard/Android/data/<application package>/cache 这个路径 -目录2Context.getCacheDir().getPath();  获取到的是 /data/data/<application package>/cache 这个路径-目录1

   点击下载FileUtils工具类


0 0
原创粉丝点击