android文件操作工具类-java

import android.app.Activity;
import android.database.Cursor;
import android.provider.MediaStore;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;

public class FileUtil {
    
    /**
     * 指定文件夹下,按文件夹、文件、名称排序
     * @param filePath 指定文件夹路径
     * @return 排序后的文件列表
     */
    public static List<File> orderByName(String filePath) {
        File file = new File(filePath);
        File[] files = file.listFiles();
        List<File> fileList = new ArrayList<>();
        if (files != null && files.length != 0) {
            fileList = Arrays.asList(files);
        }
        Collections.sort(fileList, new Comparator<File>() {
            @Override
            public int compare(File o1, File o2) {
                if (o1.isDirectory() && o2.isFile()) {
                    return -1;
                }
                if (o1.isFile() && o2.isDirectory()) {
                    return 1;
                }
                return o1.getName().compareTo(o2.getName());
            }
        });
        return fileList;
    }

    /**
     * 删除指定文件夹或文件
     * @param file 文件夹或文件
     * @return 是否删除成功
     */
    public static boolean delete(File file) {
        if (file.exists()) {
            if (file.isDirectory()) {
                return deleteDirectory(file);
            } else if (file.isFile()) {
                return file.delete();
            }
        }
        return false;
    }

    /**
     * 删除文件夹
     * @param dirFile 要删除的文件夹
     * @return 是否删除成功
     */
    public static boolean deleteDirectory(File dirFile) {
        boolean flag = true;
        File[] files = dirFile.listFiles();
        for (File file : files) {
            if (file.isFile()) {
                flag = file.delete();
                if (!flag) {
                    break;
                }
            } else if (file.isDirectory()) {
                flag = deleteDirectory(file);
                if (!flag) {
                    break;
                }
            }
        }
        if (!flag) {
            return false;
        }
        return dirFile.delete();
    }

    /**
     * 移动文件
     * @param oldPath 原路径
     * @param newPath 新路径
     */
    public static void moveFile(String oldPath, String newPath) {
        copy(oldPath, newPath);
        delete(new File(oldPath));
    }

    /**
     * 复制文件
     * @param filePath 原路径
     * @param newPath 新路径
     */
    public static void copy(String filePath, String newPath) {
        File file = new File(filePath);
        if (file.isDirectory()) {
            copyDirectory(filePath, newPath);
        } else if (file.isFile()) {
            copyFile(filePath, newPath);
        }
    }

    /**
     * 复制文件夹
     * @param fromFile 原始文件夹路径
     * @param toFile 新文件夹路径
     * @return 是否移动成功
     */
    public static boolean copyDirectory(String fromFile, String toFile) {
        File[] currentFiles;
        File root = new File(fromFile);
        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()) {
                copyDirectory(currentFiles[i].getPath(), toFile + "/" + currentFiles[i].getName());
            } else {
                copyFile(currentFiles[i].getPath(), toFile + "/" + currentFiles[i].getName());
            }
        }
        return true;
    }

    /**
     * 复制文件
     * @param filePath 原路径
     * @param newPath 新路径
     */
    public static void copyFile(String filePath, String newPath) {
        if (filePath == null || filePath.length() == 0) {
            return;
        }
        try {
            File file = new File(filePath);
            if (!file.exists()) {
                return;
            }
            File newDir = new File(newPath).getParentFile();
            if (!newDir.exists()) {
                newDir.mkdirs();
            }
            File newFile = new File(newPath);
            if (!newFile.exists()) {
                file.createNewFile();
            }
            InputStream is = new FileInputStream(file);
            FileOutputStream fos = new FileOutputStream(newFile);
            byte[] buffer = new byte[4096];
            int byteCount = 0;
            while ((byteCount = is.read(buffer)) != -1) {
                fos.write(buffer, 0, byteCount);
            }
            fos.flush();
            is.close();
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 文件重命名,用于复制文件存在命名重复情况
     * @param renameFile 需要重命名的文件
     * @return 重命名后的文件
     */
    public static File fileRename(File renameFile) {
        while (true) {
            String fileName = renameFile.getName();
            if (renameFile.isDirectory()) {
                renameFile = new File(renameFile.getPath() + "(1)");
            } else if (renameFile.isFile()) {
                renameFile = new File(renameFile.getParent() + "/" + fileName.substring(0, fileName.lastIndexOf(".")) + "(1)" + "." + fileName.substring(fileName.lastIndexOf(".") + 1));
            }
            if (!renameFile.exists()) {
                break;
            }
        }
        return renameFile;
    }

    /**
     * 根据关键字搜索文件
     * @param context
     * @param searchText 关键字
     * @return 搜索结果
     */
    public static List<File> search(Activity context, String searchText) {
        List<File> searchList = new ArrayList<>();
        String[] stringColumns = new String[]{MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.DISPLAY_NAME};
        Cursor cursor = context.getContentResolver().query(MediaStore.Files.getContentUri("external"), stringColumns, MediaStore.Files.FileColumns.DISPLAY_NAME + " like '%" + searchText + "%'", null, null);
        if (cursor.getPosition() != -1) {
            cursor.moveToPosition(-1);
        }
        while (cursor.moveToNext()) {
            String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA));
            if (!path.startsWith("/storage/emulated/0")) {
                continue;
            }
            File file = new File(path);
            if (file.exists()) {
                searchList.add(file);
            }
        }
        return searchList;
    }

    /**
     * 获取手机应用中的media列表下的文件
     * @return
     */
    public static List<File> getAppListFile() {
        List<File> fileList = new ArrayList<>();
        File appDirectory = new File("/storage/emulated/0/Android/media");
        if (appDirectory.exists()) {
            File[] files = appDirectory.listFiles();
            if (files != null && files.length > 0) {
                for (File file : files) {
                    if (file.isDirectory()) {
                        fileList.add(file);
                    }
                }
            }
        }
        return fileList;
    }

    /**
     * 获取指定文件夹大小
     * @param directoryFile 指定文件夹
     * @return
     */
    public static long getDirectorySize(File directoryFile) {
        AtomicLong size = new AtomicLong(0);
        if (directoryFile.exists()) {
            if (directoryFile.isDirectory()) {
                if (directoryFile.listFiles() != null) {
                    for (File file : directoryFile.listFiles()) {
                        if (file.isDirectory()) {
                            size.addAndGet(getDirectorySize(file));
                        } else {
                            size.addAndGet(file.length());
                        }
                    }
                }
            } else {
                size.addAndGet(directoryFile.length());
            }
        }
        return size.get();
    }

}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值