package com.basic.project.idcardservice.idcard; import android.os.Environment; import android.os.StatFs; import android.util.Log; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * Created by Administrator on 2018/7/25. */ public class FileUtils { //检查SDCard存在并且可以读写 public static boolean isSDCardState() { return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); } /** * 判断文件是否已经存在 * * @param fileName 要检查的文件名 * @return boolean, true表示存在,false表示不存在 */ public static boolean isFileExist(String fileName) { File file = new File("绝对路径" + fileName); return file.exists(); } /** * 新建目录 * * @param path 目录的绝对路径 * @return 创建成功则返回true */ public static boolean createFolder(String path) { File file = new File(path); return file.mkdir(); } /** * 创建文件 * * @param path 文件所在目录的目录名 * @param fileName 文件名 * @return 文件新建成功则返回true */ public static boolean createFile(String path, String fileName) { File file = new File(path + File.separator + fileName); if (file.exists()) { return false; } else { try { return file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } return false; } /** * 删除单个文件 * * @param path 文件所在的绝对路径 * @param fileName 文件名 * @return 删除成功则返回true */ public static boolean deleteFile(String path, String fileName) { File file = new File(path + File.separator + fileName); return file.exists() && file.delete(); } /** * 删除一个目录(可以是非空目录) * * @param dir 目录绝对路径 */ public static boolean deleteDirection(File dir) { if (dir == null || !dir.exists() || dir.isFile()) { return false; } for (File file : dir.listFiles()) { if (file.isFile()) { file.delete(); } else if (file.isDirectory()) { deleteDirection(file);//递归 } } dir.delete(); return true; } /** * 将字符串写入文件 * * @param text 写入的字符串 * @param fileStr 文件的绝对路径 * @param isAppend true从尾部写入,false从头覆盖写入 */ public static void writeFile(String text, String fileStr, boolean isAppend) { try { File file = new File(fileStr); File parentFile = file.getParentFile(); if (!parentFile.exists()) { parentFile.mkdirs(); } if (!file.exists()) { file.createNewFile(); } FileOutputStream f = new FileOutputStream(fileStr, isAppend); f.write(text.getBytes()); f.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 拷贝文件 * * @param srcPath 绝对路径 * @param destDir 目标文件所在目录 * @return boolean true拷贝成功 */ public static boolean copyFile(String srcPath, String destDir) { boolean flag = false; File srcFile = new File(srcPath); // 源文件 if (!srcFile.exists()) { Log.i("FileUtils is copyFile:", "源文件不存在"); return false; } // 获取待复制文件的文件名 String fileName = srcPath.substring(srcPath.lastIndexOf(File.separator)); String destPath = destDir + fileName; if (destPath.equals(srcPath)) { Log.i("FileUtils is copyFile:", "源文件路径和目标文件路径重复"); return false; } File destFile = new File(destPath); // 目标文件 if (destFile.exists() && destFile.isFile()) { Log.i("FileUtils is copyFile:", "该路径下已经有一个同名文件"); return false; } File destFileDir = new File(destDir); destFileDir.mkdirs(); try { FileInputStream fis = new FileInputStream(srcPath); FileOutputStream fos = new FileOutputStream(destFile); byte[] buf = new byte[1024]; int c; while ((c = fis.read(buf)) != -1) { fos.write(buf, 0, c); } fis.close(); fos.close(); flag = true; } catch (IOException e) { e.printStackTrace(); } return flag; } /** * 重命名文件 * * @param oldPath 旧文件的绝对路径 * @param newPath 新文件的绝对路径 * @return 文件重命名成功则返回true */ public static boolean renameTo(String oldPath, String newPath) { if (oldPath.equals(newPath)) { Log.i("FileUtils is renameTo:", "文件重命名失败:新旧文件名绝对路径相同"); return false; } File oldFile = new File(oldPath); File newFile = new File(newPath); return oldFile.renameTo(newFile); } /** * 计算某个文件的大小 * * @param path 文件的绝对路径 * @return 文件大小 */ public static long getFileSize(String path) { File file = new File(path); return file.length(); } /** * 计算某个文件夹的大小 * * @param file 目录所在绝对路径 * @return 文件夹的大小 */ public static double getDirSize(File file) { if (file.exists()) { //如果是目录则递归计算其内容的总大小 if (file.isDirectory()) { File[] children = file.listFiles(); double size = 0; for (File f : children) size += getDirSize(f); return size; } else {//如果是文件则直接返回其大小,以“兆”为单位 return (double) file.length() / 1024 / 1024; } } else { return 0.0; } } /** * 获取某个路径下的文件列表 * * @param path 文件路径 * @return 文件列表File[] files */ public static File[] getFileList(String path) { File file = new File(path); if (file.isDirectory()) { File[] files = file.listFiles(); if (files != null) { return files; } else { return null; } } else { return null; } } /** * 计算某个目录包含的文件数量 * * @param path 目录的绝对路径 * @return 文件数量 */ public static int getFileCount(String path) { File directory = new File(path); File[] files = directory.listFiles(); return files.length; } /** * 获取SDCard 总容量大小(MB) * * @param path 目录的绝对路径 * @return 总容量大小 */ public long getSDCardTotal(String path) { if (null != path && path.equals("")) { StatFs statfs = new StatFs(path); //获取SDCard的Block总数 long totalBlocks = statfs.getBlockCount(); //获取每个block的大小 long blockSize = statfs.getBlockSize(); //计算SDCard 总容量大小MB return totalBlocks * blockSize / 1024 / 1024; } else { return 0; } } /** * 获取SDCard 可用容量大小(MB) * * @param path 目录的绝对路径 * @return 可用容量大小 */ public long getSDCardFree(String path) { if (null != path && path.equals("")) { StatFs statfs = new StatFs(path); //获取SDCard的Block可用数 long availaBlocks = statfs.getAvailableBlocks(); //获取每个block的大小 long blockSize = statfs.getBlockSize(); //计算SDCard 可用容量大小MB return availaBlocks * blockSize / 1024 / 1024; } else { return 0; } } }