FileManager文件管理器(总结)

/**
 * File文件管理器
 */
public class FileManager {

    private static final String TAG = "FileManager";

    private static List fileList;
    private static int index = -1;

    /**
     * 创建文件
     * @param filePath 文件地址
     * @param fileName 文件名
     * @return
     */
    public static boolean createFile(String filePath, String fileName) {

        String strFilePath = filePath + fileName;
        //判断文件夹是否存在,如不存在,则创建
        File file = new File(filePath);
        if (!file.exists()) {
            /**  注意这里是 mkdirs()方法  可以创建多个文件夹 */
            file.mkdirs();
        }
        //判断文件是否存在,如不存在,则创建
        File subFile = new File(strFilePath);
        if (!subFile.exists()) {
            try {
                return subFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            return true;
        }
        return false;
    }

    /**
     * 文件集合List实例化
     */
    public static void fileListInit() {
        fileList = new ArrayList<>();
    }

    /**
     * 遍历文件夹下的文件
     *
     * @param file 地址
     */
    public static List getListFiles(File file) {
        File[] fileArray = file.listFiles();
        if (fileArray == null) {
            return null;
        } else {
            for (File f : fileArray) {
                if (f.isFile()) {
                    index ++;
                    fileList.add(index, f);
                } else {
                    index ++;
                    fileList.add(index, f);
                    getListFiles(f);
                }
            }
        }
        return fileList;
    }

    /**
     * 删除文件
     *
     * @param filePath 文件地址
     * @return
     */
    public static boolean deleteFiles(String filePath) {
        List files = getListFiles(new File(filePath));
        if (files.size() != 0) {
            for (int i = 0; i < files.size(); i++) {
                File file = files.get(i);
                /**  如果是文件则删除  如果都删除可不必判断  */
                if (file.isFile()) {
                    file.delete();
                }
            }
        }
        return true;
    }

    /**
     * 向文件中添加内容
     *
     * @param strContent 内容
     * @param filePath   地址
     * @param fileName   文件名
     */
    public static void writeToFile(String strContent, String filePath, String fileName) {
        //生成文件夹之后,再生成文件,不然会出错
        String strFilePath = filePath + fileName;
        // 每次写入时,都换行写
        File subFile = new File(strFilePath);
        if (subFile.exists()) {
            RandomAccessFile raf;
            try {
                //构造函数 第二个是读写方式
                raf = new RandomAccessFile(subFile, "rw");
                //将记录指针移动到该文件的最后
                raf.seek(subFile.length());
                //向文件末尾追加内容
                raf.write(strContent.getBytes());
                raf.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 修改文件内容(覆盖或者添加)
     *
     * @param path    文件地址
     * @param content 覆盖内容
     * @param append  指定了写入的方式,是覆盖写还是追加写(true=追加)(false=覆盖)
     */
    public static void modifyFile(String path, String content, boolean append) {
        try {
            FileWriter fileWriter = new FileWriter(path, append);
            BufferedWriter writer = new BufferedWriter(fileWriter);
            writer.append(content);
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 读取文件内容
     *
     * @param filePath 地址
     * @param filename 名称
     * @return 返回内容
     */
    public static String getFileContent(String filePath, String filename) {
        FileInputStream inputStream;
        InputStreamReader inputStreamReader = null;
        try {
            inputStream = new FileInputStream(new File(filePath + filename));
            inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        BufferedReader reader = new BufferedReader(inputStreamReader);
        StringBuffer sb = new StringBuffer("");
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append(line);
                sb.append("\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

    /**
     * 重命名文件
     *
     * @param oldPath 原来的文件地址
     * @param newPath 新的文件地址
     */
    public static void renameFile(String oldPath, String newPath) {
        File oleFile = new File(oldPath);
        File newFile = new File(newPath);
        //执行重命名
        oleFile.renameTo(newFile);
    }

    /**
     * 复制文件
     *
     * @param fromFile 要复制的文件目录
     * @param toFile   要粘贴的文件目录
     * @return 是否复制成功
     */
    public static boolean copyFile(String fromFile, String toFile) {
        //要复制的文件目录
        File[] currentFiles;
        File root = new File(fromFile);
        //如同判断SD卡是否存在或者文件是否存在
        //如果不存在则 return出去
        if (!root.exists()) {
            return false;
        }
        //如果存在则获取当前目录下的全部文件 填充数组
        currentFiles = root.listFiles();
        //目标目录
        File targetDir = new File(toFile);
        //创建目录
        if (!targetDir.exists()) {
            targetDir.mkdirs();
        }
        //遍历要复制该目录下的全部文件
        for (int i = 0; i < currentFiles.length; i++) {
            if (currentFiles[i].isDirectory()) {
                //如果当前项为子目录 进行递归
                copyFile(currentFiles[i].getPath() + "/", toFile + currentFiles[i].getName() + "/");
            } else {
                //如果当前项为文件则进行文件拷贝
                CopySdcardFile(currentFiles[i].getPath(), toFile + currentFiles[i].getName());
            }
        }
        return true;
    }

    /**
     * 要复制的目录下的所有非子目录(文件夹)文件拷贝
     * @param fromFile
     * @param toFile
     * @return
     */
    public static boolean CopySdcardFile(String fromFile, String toFile) {
        try {
            InputStream fosFrom = new FileInputStream(fromFile);
            OutputStream fosTo = new FileOutputStream(toFile);
            byte bt[] = new byte[1024];
            int c;
            while ((c = fosFrom.read(bt)) > 0) {
                fosTo.write(bt, 0, c);
            }
            fosFrom.close();
            fosTo.close();
            return true;
        } catch (Exception ex) {
            return false;
        }
    }
}

附加1:

/**
 * 文件大小格式化
 *
 * @param fileS
 * @return
 */
public static String fileSizeFormat(long fileS) {
    DecimalFormat df = new DecimalFormat("#.00");
    String fileSizeString;
    if (fileS < 1024) {
        fileSizeString = df.format((double) fileS) + "B";
    } else if (fileS < 1048576) {
        fileSizeString = df.format((double) fileS / 1024) + "KB";
    } else if (fileS < 1073741824) {
        fileSizeString = df.format((double) fileS / 1048576) + "M";
    } else {
        fileSizeString = df.format((double) fileS / 1073741824) + "G";
    }
    return fileSizeString;
}

/**
 * 获取文件最后修改时间
 *
 * @param time
 * @return
 */
public static String getFileLastModifyTime(long time) {
    Date date = new Date(time);
    String timeStamp =new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(date);
    return timeStamp;
}

附加2:

/**
 * 获取指定文件的大小
 *
 * @return
 * @throws Exception
 */
public static long getFileSize(File file) {
    long size = 0;
    if (file.exists()) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
            //文件的大小
            size = fis.available();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
    return size;
}

/**
 * 获取指定文件夹的大小
 *
 * @param directory
 * @return
 */
public static long getDirectorySize(File directory) {
    long size = 0;
    //文件夹目录下的所有文件
    File fList[] = directory.listFiles();
    if (fList == null) {
        return 0;
    } else {
        for (int i = 0; i < fList.length; i++) {
            if (fList[i].isDirectory()) {
                //判断是否父目录下还有子目录
                size = size + getDirectorySize(fList[i]);
            } else {
                size = size + getFileSize(fList[i]);
            }
        }
    }
    return size;
}

 

你可能感兴趣的:(Android开发)