File工具类


import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class FileUtils {


    private FileUtils() {
    }


    /**
     * @Desc 查询当前路径下的所有文件夹(不包含子文件夹)
     * @Param
     */
    public static ArrayList<String> Dir(File dirFile) {
        ArrayList<String> dirStrArr = new ArrayList<String>();
        if (dirFile.exists()) {
            // 直接取出利用listFiles()把当前路径下的所有文件夹、文件存放到一个文件数组
            File files[] = dirFile.listFiles();
            for (File file : files) {
                // 如果传递过来的参数dirFile是以文件分隔符,也就是/或者\结尾,则如此构造
                if (dirFile.getPath().endsWith(File.separator)) {
                    dirStrArr.add(dirFile.getPath() + file.getName());
                } else {
                    // 否则,如果没有文件分隔符,则补上一个文件分隔符,再加上文件名,才是路径
                    dirStrArr.add(dirFile.getPath() + File.separator
                            + file.getName());
                }
            }
        }
        return dirStrArr;
    }


    /**
     * @Desc 递归遍历路径下所有的文件
     * @Param
     */
    public static List<String> DirAll(File dirFile) {
        List<String> resultFile = new ArrayList<>();
        File[] files = dirFile.listFiles();
        // 判断目录下是不是空的
        if (files == null) {
            return resultFile;
        }
        for (File f : files) {
            // 判断是否文件夹
            if (f.isDirectory()) {
                resultFile.add(f.getPath());
                // 调用自身,查找子目录
                DirAll(f);
            } else {
                resultFile.add(f.getPath());
            }
        }
        return resultFile;

    }


    //遍历路径下所有的文件
    public static ArrayList<File> refreshFileList(String strPath) {
        // 存储文件列表
        ArrayList<File> fileList = new ArrayList<>();
        // 创建文件
        File dir = new File(strPath);
        // 获取当前路径下的所有文件
        File[] files = dir.listFiles();
        // 判断文件数组是否为空
        if (null == files) {
            return null;
        }
        // 循环遍历所有文件
        for (int i = 0, size = files.length; i < size; i++) {
            // 如果是文件夹
            if (files[i].isDirectory()) {
                // 遍历此路径,执行此方法
                ArrayList<File> refreshFileList = refreshFileList(files[i].getAbsolutePath());
                if (null != refreshFileList) {
                    fileList.addAll(refreshFileList);
                }
            } else {
                // 添加到文件列表
                fileList.add(files[i]);
            }
        }
        return fileList;
    }

    //遍历删除文件夹下面的指定格式的file文件
    public static void deleteAllInnerFilesAndDirs(String filePath) {

        File file = new File(filePath);
        boolean isDirectory = file.isDirectory();
        if (isDirectory) {
            String[] files = file.list();
            File[] listFiles = file.listFiles();
            for (String f : files) {
                String afterPointLetter = f.substring(f.lastIndexOf(".") + 1, f.length());
                if (forbidFormat(afterPointLetter)) {
                    System.out.println("d:\\movie\\" + f);
                    File deleteFile = new File(filePath + f);
                    if (deleteFile.exists()) {
                        deleteFile.delete();
                    }
                }
            }
        } else {
            if (file.isFile()) {
                file.delete();
            }
        }

    }

    public static boolean forbidFormat(String threeLetter) {
        List<String> fileFormat = new ArrayList<String>();
        fileFormat.add("jpg");
        fileFormat.add("avi");
        if (fileFormat.contains(threeLetter)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 删除所有文件和目录
     *
     * @param path
     */
    public static void deleteAllFilesAndDirs(String path) {

        File createFile = new File(path);
        File[] listFiles = createFile.listFiles();
        for (File file : listFiles) {
            if (file.isFile()) {
                file.delete();
            } else {
                deleteAllFilesAndDirs(file.toString());
                file.delete();
            }
        }
        System.out.println("删除完成!");
    }

    public static void deleteFolder(File dir) {

        File dirFile[] = dir.listFiles();
        for (int i = 0; i < dirFile.length; i++) {
            if (dirFile[i].isDirectory()) {
                deleteFolder(dirFile[i]);
            }
            dirFile[i].delete();
        }
    }


    /**
     * 递归查看文件和目录
     * https://developer.aliyun.com/article/716235?spm=a2c6h.14164896.0.0.a1515eb3kn0XMg
     *
     * @param path
     */
    public static void showAllFilesAndDirs(String path) {
        List fileList = new ArrayList();
        List fodeList = new ArrayList();

        File dirFile = new File(path);
        File[] files = dirFile.listFiles();
        if (null == files) {
            return;
        }
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println("目录》》》" + file);
                fodeList.add(file.toString());
                showAllFilesAndDirs(file.getAbsolutePath());

            } else {
                System.out.println("文件》》》" + file);
                fileList.add(file.toString());
            }
        }
        System.out.println("fileList : " + fileList.toString());
        System.out.println("fodeList : " + fodeList.toString());
    }

    //复制文件夹
    private static void copyFolder(File srcFile, File desFile) throws IOException {
        if (srcFile.isDirectory()) {
            //是文件夹,首先在目标位置创建同名文件夹,然后遍历文件夹下的文件,进行递归调用copyFolder函数
            File newFolder = new File(desFile, srcFile.getName());
            newFolder.mkdir();
            File[] fileArray = srcFile.listFiles();
            for (File file : fileArray) {
                copyFolder(file, newFolder);
            }
        } else {
            //是文件,直接copy到目标文件夹
            File newFile = new File(desFile, srcFile.getName());
            copyFile(srcFile, newFile);
        }
    }

    //复制文件到指定位置
    private static void copyFile(File srcFile, File newFile) throws IOException {
        //复制文件到指定位置
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
        byte[] b = new byte[1024];
        Integer len = 0;
        while ((len = bis.read(b)) != -1) {
            bos.write(b, 0, len);
        }
        bis.close();
        bos.close();
    }


    public static void main(String[] args) {

//        File file = new File("D:/新建文件夹/merge");
//        ArrayList<File> dirStrArr = FileUtils.refreshFileList("D:/新建文件夹/merge");
//        System.out.println(dirStrArr.toString());
//        deleteFolder(new File("D:\\新建文件夹\\merge"));

        showAllFilesAndDirs("D:\\新建文件夹");

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值