Android-FileUtils工具类

Posted 刘德利_Android

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android-FileUtils工具类相关的知识,希望对你有一定的参考价值。

文件相关工具类

public final class FileUtils 

    private FileUtils() 
        throw new UnsupportedOperationException("u can't instantiate me...");
    

    private static final String LINE_SEP = System.getProperty("line.separator");

    /**
     * 根据文件路径获取文件
     *
     * @param filePath 文件路径
     * @return 文件
     */
    public static File getFileByPath(final String filePath) 
        return isSpace(filePath) ? null : new File(filePath);
    

    /**
     *  根据文件目录路径获取子目录名称(不获取二级子目录)
     * @param dirPath 文件路径
     * @return 文件目录名称
     */
    public static List<String> getFiledirList(String dirPath)
        if (dirPath == null || !isDir(dirPath)) return null;
        List<String> stringList = new ArrayList<>();
        File f = new File(dirPath);
        File[] files = f.listFiles();
        if(files != null&& files.length != 0)
            for (File file : files) 
                if (file.isDirectory()) 
                    stringList.add(file.getName());
                
            
        
        return stringList;
    
    /**
     * 判断文件是否存在
     *
     * @param filePath 文件路径
     * @return @code true: 存在<br>@code false: 不存在
     */
    public static boolean isFileExists(final String filePath) 
        return isFileExists(getFileByPath(filePath));
    

    /**
     * 判断文件是否存在
     *
     * @param file 文件
     * @return @code true: 存在<br>@code false: 不存在
     */
    public static boolean isFileExists(final File file) 
        return file != null && file.exists();
    

    /**
     * 重命名文件
     *
     * @param filePath 文件路径
     * @param newName  新名称
     * @return @code true: 重命名成功<br>@code false: 重命名失败
     */
    public static boolean rename(final String filePath, final String newName) 
        return rename(getFileByPath(filePath), newName);
    

    /**
     * 重命名文件
     *
     * @param file    文件
     * @param newName 新名称
     * @return @code true: 重命名成功<br>@code false: 重命名失败
     */
    public static boolean rename(final File file, final String newName) 
        // 文件为空返回false
        if (file == null) return false;
        // 文件不存在返回false
        if (!file.exists()) return false;
        // 新的文件名为空返回false
        if (isSpace(newName)) return false;
        // 如果文件名没有改变返回true
        if (newName.equals(file.getName())) return true;
        File newFile = new File(file.getParent() + File.separator + newName);
        // 如果重命名的文件已存在返回false
        return !newFile.exists()
                && file.renameTo(newFile);
    

    /**
     * 判断是否是目录
     *
     * @param dirPath 目录路径
     * @return @code true: 是<br>@code false: 否
     */
    public static boolean isDir(final String dirPath) 
        return isDir(getFileByPath(dirPath));
    

    /**
     * 判断是否是目录
     *
     * @param file 文件
     * @return @code true: 是<br>@code false: 否
     */
    public static boolean isDir(final File file) 
        return isFileExists(file) && file.isDirectory();
    

    /**
     * 判断是否是文件
     *
     * @param filePath 文件路径
     * @return @code true: 是<br>@code false: 否
     */
    public static boolean isFile(final String filePath) 
        return isFile(getFileByPath(filePath));
    

    /**
     * 判断是否是文件
     *
     * @param file 文件
     * @return @code true: 是<br>@code false: 否
     */
    public static boolean isFile(final File file) 
        return isFileExists(file) && file.isFile();
    

    /**
     * 判断目录是否存在,不存在则判断是否创建成功
     *
     * @param dirPath 目录路径
     * @return @code true: 存在或创建成功<br>@code false: 不存在或创建失败
     */
    public static boolean createOrExistsDir(final String dirPath) 
        return createOrExistsDir(getFileByPath(dirPath));
    

    /**
     * 判断目录是否存在,不存在则判断是否创建成功
     *
     * @param file 文件
     * @return @code true: 存在或创建成功<br>@code false: 不存在或创建失败
     */
    public static boolean createOrExistsDir(final File file) 
        // 如果存在,是目录则返回true,是文件则返回false,不存在则返回是否创建成功
        return file != null && (file.exists() ? file.isDirectory() : file.mkdirs());
    

    /**
     * 判断文件是否存在,不存在则判断是否创建成功
     *
     * @param filePath 文件路径
     * @return @code true: 存在或创建成功<br>@code false: 不存在或创建失败
     */
    public static boolean createOrExistsFile(final String filePath) 
        return createOrExistsFile(getFileByPath(filePath));
    

    /**
     * 判断文件是否存在,不存在则判断是否创建成功
     *
     * @param file 文件
     * @return @code true: 存在或创建成功<br>@code false: 不存在或创建失败
     */
    public static boolean createOrExistsFile(final File file) 
        if (file == null) return false;
        // 如果存在,是文件则返回true,是目录则返回false
        if (file.exists()) return file.isFile();
        if (!createOrExistsDir(file.getParentFile())) return false;
        try 
            return file.createNewFile();
         catch (IOException e) 
            e.printStackTrace();
            return false;
        
    

    /**
     * 判断文件是否存在,存在则在创建之前删除
     *
     * @param file 文件
     * @return @code true: 创建成功<br>@code false: 创建失败
     */
    public static boolean createFileByDeleteOldFile(final File file) 
        if (file == null) return false;
        // 文件存在并且删除失败返回false
        if (file.exists() && !file.delete()) return false;
        // 创建目录失败返回false
        if (!createOrExistsDir(file.getParentFile())) return false;
        try 
            return file.createNewFile();
         catch (IOException e) 
            e.printStackTrace();
            return false;
        
    

    /**
     * 复制或移动目录
     *
     * @param srcDirPath  源目录路径
     * @param destDirPath 目标目录路径
     * @param isMove      是否移动
     * @return @code true: 复制或移动成功<br>@code false: 复制或移动失败
     */
    private static boolean copyOrMoveDir(final String srcDirPath, final String destDirPath, final boolean isMove) 
        return copyOrMoveDir(getFileByPath(srcDirPath), getFileByPath(destDirPath), isMove);
    

    /**
     * 复制或移动目录
     *
     * @param srcDir  源目录
     * @param destDir 目标目录
     * @param isMove  是否移动
     * @return @code true: 复制或移动成功<br>@code false: 复制或移动失败
     */
    private static boolean copyOrMoveDir(final File srcDir, final File destDir, final boolean isMove) 
        if (srcDir == null || destDir == null) return false;
        // 如果目标目录在源目录中则返回false,看不懂的话好好想想递归怎么结束
        // srcPath : F:\\\\MyGithub\\\\androidUtilCode\\\\utilcode\\\\src\\\\test\\\\res
        // destPath: F:\\\\MyGithub\\\\AndroidUtilCode\\\\utilcode\\\\src\\\\test\\\\res1
        // 为防止以上这种情况出现出现误判,须分别在后面加个路径分隔符
        String srcPath = srcDir.getPath() + File.separator;
        String destPath = destDir.getPath() + File.separator;
        if (destPath.contains(srcPath)) return false;
        // 源文件不存在或者不是目录则返回false
        if (!srcDir.exists() || !srcDir.isDirectory()) return false;
        // 目标目录不存在返回false
        if (!createOrExistsDir(destDir)) return false;
        File[] files = srcDir.listFiles();
        for (File file : files) 
            File oneDestFile = new File(destPath + file.getName());
            if (file.isFile()) 
                // 如果操作失败返回false
                if (!copyOrMoveFile(file, oneDestFile, isMove)) return false;
             else if (file.isDirectory()) 
                // 如果操作失败返回false
                if (!copyOrMoveDir(file, oneDestFile, isMove)) return false;
            
        
        return !isMove || deleteDir(srcDir);
    

    /**
     * 复制或移动文件
     *
     * @param srcFilePath  源文件路径
     * @param destFilePath 目标文件路径
     * @param isMove       是否移动
     * @return @code true: 复制或移动成功<br>@code false: 复制或移动失败
     */
    private static boolean copyOrMoveFile(final String srcFilePath, final String destFilePath, final boolean isMove) 
        return copyOrMoveFile(getFileByPath(srcFilePath), getFileByPath(destFilePath), isMove);
    

    /**
     * 复制或移动文件
     *
     * @param srcFile  源文件
     * @param destFile 目标文件
     * @param isMove   是否移动
     * @return @code true: 复制或移动成功<br>@code false: 复制或移动失败
     */
    private static boolean copyOrMoveFile(final File srcFile, final File destFile, final boolean isMove) 
        if (srcFile == null || destFile == null) return false;
        // 源文件不存在或者不是文件则返回false
        if (!srcFile.exists() || !srcFile.isFile()) return false;
        // 目标文件存在且是文件则返回false
        if (destFile.exists() && destFile.isFile()) return false;
        // 目标目录不存在返回false
        if (!createOrExistsDir(destFile.getParentFile())) return false;
        try 
            return FileIOUtils.writeFileFromIS(destFile, new FileInputStream(srcFile), false)
                    && !(isMove && !deleteFile(srcFile));
         catch (FileNotFoundException e) 
            e.printStackTrace();
            return false;
        
    

    /**
     * 复制目录
     *
     * @param srcDirPath  源目录路径
     * @param destDirPath 目标目录路径
     * @return @code true: 复制成功<br>@code false: 复制失败
     */
    public static boolean copyDir(final String srcDirPath, final String destDirPath) 
        return copyDir(getFileByPath(srcDirPath), getFileByPath(destDirPath));
    

    /**
     * 复制目录
     *
     * @param srcDir  源目录
     * @param destDir 目标目录
     * @return @code true: 复制成功<br>@code false: 复制失败
     */
    public static boolean copyDir(final File srcDir, final File destDir) 
        return copyOrMoveDir(srcDir, destDir, false);
    

    /**
     * 复制文件
     *
     * @param srcFilePath  源文件路径
     * @param destFilePath 目标文件路径
     * @return @code true: 复制成功<br>@code false: 复制失败
     */
    public static boolean copyFile(final String srcFilePath, final String destFilePath) 
        return copyFile(getFileByPath(srcFilePath), getFileByPath(destFilePath));
    

    /**
     * 复制文件
     *
     * @param srcFile  源文件
     * @param destFile 目标文件
     * @return @code true: 复制成功<br>@code false: 复制失败
     */
    public static boolean copyFile(final File srcFile, final File destFile) 
        return copyOrMoveFile(srcFile, destFile, false);
    

    /**
     * 移动目录
     *
     * @param srcDirPath  源目录路径
     * @param destDirPath 目标目录路径
     * @return @code true: 移动成功<br>@code false: 移动失败
     */
    public static boolean moveDir(final String srcDirPath, final String destDirPath) 
        return moveDir(getFileByPath(srcDirPath), getFileByPath(destDirPath));
    

    /**
     * 移动目录
     *
     * @param srcDir  源目录
     * @param destDir 目标目录
     * @return @code true: 移动成功<br>@code false: 移动失败
     */
    public static boolean moveDir(final File srcDir, final File destDir) 
        return copyOrMoveDir(srcDir, destDir, true);
    

    /**
     * 移动文件
     *
     * @param srcFilePath  源文件路径
     * @param destFilePath 目标文件路径
     * @return @code true: 移动成功<br>@code false: 移动失败
     */
    public static boolean moveFile(final String srcFilePath, final String destFilePath) 
        Log.e("xxx","移动文件"+srcFilePath+"---->"+destFilePath);
        return moveFile(getFileByPath(srcFilePath), getFileByPath(destFilePath));
    

    /**
     * 移动文件
     *
     * @param srcFile  源文件
     * @param destFile 目标文件
     * @return @code true: 移动成功<br>@code false: 移动失败
     */
    public static boolean moveFile(final File srcFile, final File destFile) 
        return copyOrMoveFile(srcFile, destFile, true);
    

    /**
     * 删除目录
     *
     * @param dirPath 目录路径
     * @return @code true: 删除成功<br>@code false: 删除失败
     */
    public static boolean deleteDir(final String dirPath) 
        return deleteDir(getFileByPath(dirPath));
    


    /**
     * 删除文件或目录
     * @param file
     * @return
     */
    public static boolean deleteDirOrFile(File file)
        if (file == null) return false;
        if (!file.exists()) return false;
        if(file.isFile())
            return deleteFile(file);
        else
            return deleteDir(file);
        
    

    /**
     * 删除文件或目录
     * @param path
     * @return
     */
    public static boolean deleteDirOrFile(String path)
        return deleteDirOrFile(getFileByPath(path));
    

    /**
     * 删除目录
     *
     * @param dir 目录
     * @return @code true: 删除成功<br>@code false: 删除失败
     */
    public static boolean deleteDir(final File dir) 
        if (dir == null) return false;
        // 目录不存在返回true
        if (!dir.exists()) return true;
        // 不是目录返回false
        if (!dir.isDirectory()) return false;
        // 现在文件存在且是文件夹
        File[] files = dir.listFiles();
        if (files != null && files.length != 0) 
            for (File file : files) 
                if (file.isFile()) 
                    if (!file.delete()) return false;
                 else if (file.isDirectory()) 
                    if (!deleteDir(file)) return false;
                
            
        
        return dir.delete();
    

    /**
     * 删除Luban文件集合 以“|” 分割
     * @param srcFilePaths
     */
    public static void  deleteFiles(String srcFilePaths)
        if(TextUtils.isEmpty(srcFilePaths))
            return;
        List<String> list = Arrays.asList(srcFilePaths.split("\\\\|"));
        for(String path : list)
            if(path.contains("luban"))
                deleteFile(path);
            
        
    

    /**
     * 删除文件
     *
     * @param srcFilePath 文件路径
     * @return @code true: 删除成功<br>@code false: 删除失败
     */
    public static boolean deleteFile(final String srcFilePath) 
        return deleteFile(getFileByPath(srcFilePath));
    

    /**
     * 删除文件
     *
     * @param file 文件
     * @return @code true: 删除成功<br>@code false: 删除失败
     */
    public static boolean deleteFile(final File file) 
        return file != null && (!file.exists() || file.isFile() && file.delete());
    

    /**
     * 删除目录下的所有文件
     *
     * @param dirPath 目录路径
     * @return @code true: 删除成功<br>@code false: 删除失败
     */
    public static boolean deleteFilesInDir(final String dirPath) 
        return deleteFilesInDir(getFileByPath(dirPath));
    

    /**
     * 删除目录下的所有文件
     *
     * @param dir 目录
     * @return @code true: 删除成功<br>@code false: 删除失败
     */
    public static boolean deleteFilesInDir(final File dir) 
        if (dir == null) return false;
        // 目录不存在返回true
        if (!dir.exists()) return true;
        // 不是目录返回false
        if (!dir.isDirectory()) return false;
        // 现在文件存在且是文件夹
        File[] files = dir.listFiles();
        if (files != null && files.length != 0) 
            for (File file : files) 
                if (file.isFile()) 
                    if (!file.delete()) return false;
                 else if (file.isDirectory()) 
                    if (!deleteDir(file)) return false;
                
            
        
        return true;
    

    /**
     * 获取目录下所有文件
     *
     * @param dirPath     目录路径
     * @param isRecursive 是否递归进子目录
     * @return 文件链表
     */
    public static List<File> listFilesInDir(final String dirPath, final boolean isRecursive) 
        return listFilesInDir(getFileByPath(dirPath), isRecursive);
    

    /**
     * 获取目录下所有文件
     *
     * @param dir         目录
     * @param isRecursive 是否递归进子目录
     * @return 文件链表
     */
    public static List<File> listFilesInDir(final File dir, final boolean isRecursive) 
        if (!isDir(dir)) return null;
        if (isRecursive) return listFilesInDir(dir);
        List<File> list = new ArrayList<>();
        File[] files = dir.listFiles();
        if (files != null && files.length != 0) 
            Collections.addAll(list, files);
        
        return list;
    

    /**
     * 获取目录下所有文件包括子目录
     *
     * @param dirPath 目录路径
     * @return 文件链表
     */
    public static List<File> listFilesInDir(final String dirPath) 
        return listFilesInDir(getFileByPath(dirPath));
    

    /**
     * 获取目录下所有文件包括子目录
     *
     * @param dir 目录
     * @return 文件链表
     */
    public static List<File> listFilesInDir(final File dir) 
        if (!isDir(dir)) return null;
        List<File> list = new ArrayList<>();
        File[] files = dir.listFiles();
        if (files != null && files.length != 0) 
            for (File file : files) 
                list.add(file);
                if (file.isDirectory()) 
                    List<File> fileList = listFilesInDir(file);
                    if (fileList != null) 
                        list.addAll(fileList);
                    
                
            
        
        return list;
    

    /**
     * 获取目录下所有后缀名为suffix的文件
     * <p>大小写忽略</p>
     *
     * @param dirPath     目录路径
     * @param suffix      后缀名
     * @param isRecursive 是否递归进子目录
     * @return 文件链表
     */
    public static List<File> listFilesInDirWithFilter(final String dirPath, final String suffix, final boolean isRecursive) 
        return listFilesInDirWithFilter(getFileByPath(dirPath), suffix, isRecursive);
    

    /**
     * 获取目录下所有后缀名为suffix的文件
     * <p>大小写忽略</p>
     *
     * @param dir         目录
     * @param suffix      后缀名
     * @param isRecursive 是否递归进子目录
     * @return 文件链表
     */
    public static List<File> listFilesInDirWithFilter(final File dir, final String suffix, final boolean isRecursive) 
        if (isRecursive) return listFilesInDirWithFilter(dir, suffix);
        if (dir == null || !isDir(dir)) return null;
        List<File> list = new ArrayList<>();
        File[] files = dir.listFiles();
        if (files != null && files.length != 0) 
            for (File file : files) 
                if(file.length()>10)
                    if (file.getName().toUpperCase().endsWith(suffix.toUpperCase())) 
                        list.add(file);
                    
                
            
        
        return list;
    

    /**
     * 获取目录下所有后缀名为suffix的文件包括子目录
     * <p>大小写忽略</p>
     *
     * @param dirPath 目录路径
     * @param suffix  后缀名
     * @return 文件链表
     */
    public static List<File> listFilesInDirWithFilter(final String dirPath, final String suffix) 
        return listFilesInDirWithFilter(getFileByPath(dirPath), suffix);
    

    /**
     * 获取目录下所有后缀名为suffix的文件包括子目录
     * <p>大小写忽略</p>
     *
     * @param dir    目录
     * @param suffix 后缀名
     * @return 文件链表
     */
    public static List<File> listFilesInDirWithFilter(final File dir, final String suffix) 
        if (dir == null || !isDir(dir)) return null;
        List<File> list = new ArrayList<>();
        File[] files = dir.listFiles();
        if (files != null && files.length != 0) 
            for (File file : files) 
                if (file.getName().toUpperCase().endsWith(suffix.toUpperCase())) 
                    list.add(file);
                
                if (file.isDirectory()) 
                    list.addAll(listFilesInDirWithFilter(file, suffix));
                
            
        
        return list;
    

    /**
     * 获取目录下所有符合filter的文件
     *
     * @param dirPath     目录路径
     * @param filter      过滤器
     * @param isRecursive 是否递归进子目录
     * @return 文件链表
     */
    public static List<File> listFilesInDirWithFilter(final String dirPath, final FilenameFilter filter, final boolean isRecursive) 
        return listFilesInDirWithFilter(getFileByPath(dirPath), filter, isRecursive);
    

    /**
     * 获取目录下所有符合filter的文件
     *
     * @param dir         目录
     * @param filter      过滤器
     * @param isRecursive 是否递归进子目录
     * @return 文件链表
     */
    public static List<File> listFilesInDirWithFilter(final File dir, final FilenameFilter filter, final boolean isRecursive) 
        if (isRecursive) return listFilesInDirWithFilter(dir, filter);
        if (dir == null || !isDir(dir)) return null;
        List<File> list = new ArrayList<>();
        File[] files = dir.listFiles();
        if (files != null && files.length != 0) 
            for (File file : files) 
                if (filter.accept(file.getParentFile(), file.getName())) 
                    list.add(file);
                
            
        
        return list;
    

    /**
     * 获取目录下所有符合filter的文件包括子目录
     *
     * @param dirPath 目录路径
     * @param filter  过滤器
     * @return 文件链表
     */
    public static List<File> listFilesInDirWithFilter(final String dirPath, final FilenameFilter filter) 
        return listFilesInDirWithFilter(getFileByPath(dirPath), filter);
    

    /**
     * 获取目录下所有符合filter的文件包括子目录
     *
     * @param dir    目录
     * @param filter 过滤器
     * @return 文件链表
     */
    public static List<File> listFilesInDirWithFilter(final File dir, final FilenameFilter filter) 
        if (dir == null || !isDir(dir)) return null;
        List<File> list = new ArrayList<>();
        File[] files = dir.listFiles();
        if (files != null && files.length != 0) 
            for (File file : files) 
                if (filter.accept(file.getParentFile(), file.getName())) 
                    list.add(file);
                
                if (file.isDirectory()) 
                    list.addAll(listFilesInDirWithFilter(file, filter));
                
            
        
        return list;
    

    /**
     * 获取目录下指定文件名的文件包括子目录
     * <p>大小写忽略</p>
     *
     * @param dirPath  目录路径
     * @param fileName 文件名
     * @return 文件链表
     */
    public static List<File> searchFileInDir(final String dirPath, final String fileName) 
        return searchFileInDir(getFileByPath(dirPath), fileName);
    

    /**
     * 获取目录下指定文件名的文件包括子目录
     * <p>大小写忽略</p>
     *
     * @param dir      目录
     * @param fileName 文件名
     * @return 文件链表
     */
    public static List<File> searchFileInDir(final File dir, final String fileName) 
        if (dir == null || !isDir(dir)) return null;
        List<File> list = new ArrayList<>();
        File[] files = dir.listFiles();
        if (files != null && files.length != 0) 
            for (File file : files) 
                if (file.getName().toUpperCase().equals(fileName.toUpperCase())) 
                    list.add(file);
                
                if (file.isDirectory()) 
                    list.addAll(searchFileInDir(file, fileName));
                
            
        
        return list;
    

    /**
     * 获取文件最后修改的毫秒时间戳
     *
     * @param filePath 文件路径
     * @return 文件最后修改的毫秒时间戳
     */
    public static long getFileLastModified(final String filePath) 
        return getFileLastModified(getFileByPath(filePath));
    

    /**
     * 获取文件最后修改的毫秒时间戳
     *
     * @param file 文件
     * @return 文件最后修改的毫秒时间戳
     */
    public static long getFileLastModified(final File file) 
        if (file == null) return -1;
        return file.lastModified();
    

    /**
     * 简单获取文件编码格式
     *
     * @param filePath 文件路径
     * @return 文件编码
     */
    public static String getFileCharsetSimple(final String filePath) 
        return getFileCharsetSimple(getFileByPath(filePath));
    

    /**
     * 简单获取文件编码格式
     *
     * @param file 文件
     * @return 文件编码
     */
    public static String getFileCharsetSimple(final File file) 
        int p = 0;
        InputStream is = null;
        try 
            is = new BufferedInputStream(new FileInputStream(file));
            p = (is.read() << 8) + is.read();
         catch (IOException e) 
            e.printStackTrace();
         finally 
            CloseUtils.closeIO(is);
        
        switch (p) 
            case 0xefbb:
                return "UTF-8";
            case 0xfffe:
                return "Unicode";
            case 0xfeff:
                return "UTF-16BE";
            default:
                return "GBK";
        
    

    /**
     * 获取文件行数
     *
     * @param filePath 文件路径
     * @return 文件行数
     */
    public static int getFileLines(final String filePath) 
        return getFileLines(getFileByPath(filePath));
    

    /**
     * 获取文件行数
     * <p>比readLine要快很多</p>
     *
     * @param file 文件
     * @return 文件行数
     */
    public static int getFileLines(final File file) 
        int count = 1;
        InputStream is = null;
        try 
            is = new BufferedInputStream(new FileInputStream(file));
            byte[] buffer = new byte[1024];
            int readChars;
            if (LINE_SEP.endsWith("\\n")) 
                while ((readChars = is.read(buffer, 0, 1024)) != -1) 
                    for (int i = 0; i < readChars; ++i) 
                        if (buffer[i] == '\\n') ++count;
                    
                
             else 
                while ((readChars = is.read(buffer, 0, 1024)) != -1) 
                    for (int i = 0; i < readChars; ++i) 
                        if (buffer[i] == '\\r') ++count;
                    
                
            
         catch (IOException e) 
            e.printStackTrace();
         finally 
            CloseUtils.closeIO(is);
        
        return count;
    

    /**
     * 获取目录大小
     *
     * @param dirPath 目录路径
     * @return 文件大小
     */
    public static String getDirSize(final String dirPath) 
        return getDirSize(getFileByPath(dirPath));
    

    /**
     * 获取目录大小
     *
     * @param dir 目录
     * @return 文件大小
     */
    public static String getDirSize(final File dir) 
        long len = getDirLength(dir);
        return len == -1 ? "" : byte2FitMemorySize(len);
    

    /**
     * 获取文件大小
     *
     * @param filePath 文件路径
     * @return 文件大小
     */
    public static String getFileSize(final String filePath) 
        return getFileSize(getFileByPath(filePath));
    

    /**
     * 获取文件大小
     *
     * @param file 文件
     * @return 文件大小
     */
    public static String getFileSize(final File file) 
        long len = getFileLength(file);
        return len == -1 ? "" : byte2FitMemorySize(len);
    

    /**
     * 获取目录长度
     *
     * @param dirPath 目录路径
     * @return 目录长度
     */
    public static long getDirLength(final String dirPath) 
        return getDirLength(getFileByPath(dirPath));
    

    /**
     * 获取目录长度
     *
     * @param dir 目录
     * @return 目录长度
     */
    public static long getDirLength(final File dir) 
        if (!isDir(dir)) return -1;
        long len = 0;
        File[] files = dir.listFiles();
        if (files != null && files.length != 0) 
            for (File file : files) 
                if (file.isDirectory()) 
                    len += getDirLength(file);
           

以上是关于Android-FileUtils工具类的主要内容,如果未能解决你的问题,请参考以下文章

单层感知器

java多媒体文件编码要怎么写,处理工具类代码实例详情介绍

新媒体运营工具都有哪些

ABP vNext微服务架构详细教程(补充篇)——单层模板(中)

最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类

使用 U-Net 作为单层进行语义分割的输入标签