Java文件工具类

Java文件工具类

JavaUtils

可以直接copy使用


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.util.ArrayList;

/*
 * 文件工具类
 */
public  class FileUtils {
    /*
     * 指定关键字检索文件
     * @param file  File对象
     * @param key  关键字
     * @return 包含关键字的文件路径
     */
    public static ArrayList<String>  listFiles(File file,final String key) {
        //创建过滤器对象
        FilenameFilter filter=new FilenameFilter() {
            //如果文件名包含关键字返回true,否则返回false
            @Override
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                File currFile=new File(dir,name);
                if (currFile.isFile()&&name.contains(key)) {
                    return true;
                }
                return false;
            }
        };
        //递归方式获取规定的路径
        ArrayList<String>arrayList=fileDir(file,filter);
        return arrayList;
    }

    /*
     * 递归方式获取规定的路径
     * @param dir  file对象
     * @param filter  过滤器
     * @return 过滤器过滤后的文件路径
     */
    private static ArrayList<String> fileDir(File dir, FilenameFilter filter) {
        // TODO Auto-generated method stub
        ArrayList<String>arrayList=new ArrayList<>();
        //获取过滤后的所有文件
        File[] lists=dir.listFiles(filter);
        for(File list:lists){
            //将文件的绝对路径放到集合中
            arrayList.add(list.getAbsolutePath());
        }
        //获取当前目录下所有的文件数组
        File[]files=dir.listFiles();
        //遍历所有的子目录和文件
        for(File file:files){
            if (file.isDirectory()) {
                //如果是目录,递归调用fileDir
                ArrayList<String>every=fileDir(file, filter);
                //将文件夹下的文件路径添加到集合
                arrayList.addAll(every);
            }
        }
        //此时的集合中当前目录下的文件路径,和当前目录的子目录下的文件路径
        return arrayList;
    }

    /*
     * 指定后缀名检索文件
     * @param file  File对象
     * @param suffixArray 后缀名数组
     * @return 指定后缀的文件路径
     */
    public static ArrayList<String>listFiles(File file,final String[] suffixArray){
        //创建过滤器对象
        FilenameFilter filter=new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                // TODO Auto-generated method stub
                File currFile=new File(dir,name);
                //如果文件名以指定后缀名结尾返回true,否则返回false
                if (currFile.isFile()) {
                    for(String suffix:suffixArray){
                        if (name.endsWith("."+suffix)) {
                            return true;
                        }
                    }

                }
                return false;
            }
        };
        //递归方式获取规定的路径
        ArrayList<String>arrayList=fileDir(file, filter);
        return arrayList;
    }


    /*
     * 复制文件/目录
     * @param srcFile 源目录
     * @param destFile 目标文件
     */
    public static void copySrcPathToDestPath(File srcDir,File destDir)
            throws Exception{
        File[]files=srcDir.listFiles();//子文件目录
        for(int i=0;i<files.length;i++){
            //创建指定目录的文件
            File copiedFile=new File(destDir,files[i].getName());
            //如果是目录
            if (files[i].isDirectory()) {
                //创建文件夹
                if (!copiedFile.mkdirs()) {
                    System.out.println("无法创建:"+copiedFile);
                    return;
                }
                //调用递归,获取子文件夹下的文件路径
                copySrcPathToDestPath(files[i],copiedFile);
            }else {
                //复制文件
                FileInputStream input=new FileInputStream(files[i]);//获取输入流
                FileOutputStream out=new FileOutputStream(copiedFile);//获取输出流
                byte[]buffer=new byte[1024];//创建缓冲区
                int n=0;
                //循环读取字节
                while ((n=input.read(buffer))!=-1) {
                    out.write(buffer,0,n);
                }
                //关闭输入流
                input.close();
                //关闭输出流
                out.close();
            }
        }
    }
}

posted @ 2020-05-05 21:41  野生的Lemon柠檬  阅读(262)  评论(0编辑  收藏  举报

呱呱呱呱呱🐸