java代码实现文件筛选 大小 时间 格式

下载地址
链接: https://pan.baidu.com/s/15kiQilp5zQuHf97tBlXYhw 提取码: iprj 复制这段内容后打开百度网盘手机App,操作更方便哦

代码下载完后,大小过滤器代码第24行
if(size >= maxSize && size <= maxSize)改为 if(size >= minSize && size <= maxSize)

文件路径集合:多个url就是多路径筛选,单个url就是单路径筛选
筛选机制: 过滤链(文件大小,文件时间,文件格式)需要筛选什么就加入什么过滤器

策略:多路径文件筛选集合合并,多路径文件筛选集合分离
目录结构:
在这里插入图片描述

##过滤器 Filter

FileDateFilter

package com.company.CustomerFileDemo.Filter;

import org.apache.commons.lang3.ObjectUtils;

import java.io.File;
import java.io.FileFilter;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributeView;
import java.nio.file.attribute.BasicFileAttributes;

public class FileDateFilter implements FileFilter {
    /**开始时间毫秒数*/
    private Long startTime = 0L;
    /**结束时间毫秒数*/
    private Long endTime = 0L;

    public FileDateFilter(Long startTime, Long endTime) {
        this.startTime = startTime;
        this.endTime = endTime;
    }


    @Override
    public boolean accept(File file) {
        if(!ObjectUtils.equals(file, null) && endTime >= startTime){
            Long  fileDateMillis = getFileDate(file.getAbsolutePath());
            System.out.println(fileDateMillis);
            endTime = startTime == endTime? startTime: endTime;
            if(fileDateMillis >= startTime && fileDateMillis <= endTime){
                return true;
            }else{
                return false;
            }

        }else {
            throw new IllegalArgumentException("该文件路径不存在:" + file.getAbsolutePath());
        }
    }

    private long getFileDate(String url){
        File file = new File(url);
        try {
            Path path= Paths.get(url);
            BasicFileAttributeView basicview= Files.getFileAttributeView(path, BasicFileAttributeView.class, LinkOption.NOFOLLOW_LINKS );
            BasicFileAttributes attr = basicview.readAttributes();
            return attr.creationTime().toMillis();
        } catch (Exception e) {
            e.printStackTrace();
            return file.lastModified();
        }
    }
}

FileSizeFilter

package com.company.CustomerFileDemo.Filter;

import java.io.File;
import java.io.FileFilter;
import java.util.Objects;

public final class FileSizeFilter implements FileFilter {

    /**文件最小大小 单位(字节)*/
    private Long minSize = 0L ;
    /**文件最大大小 单位 (字节)*/
    private Long maxSize = 0L;

    public FileSizeFilter(Long minSize, Long maxSize) {
        this.minSize = minSize;
        this.maxSize = maxSize;
    }

    @Override
    public boolean accept(File file) {
        if(!Objects.equals(file, null) && maxSize >= minSize){
            Long  size = file.length();
            maxSize = minSize == maxSize? minSize: maxSize;
            if(size >= minSize && size <= maxSize){
                return true;
            }else{
                return false;
            }

        }else {
            throw new IllegalArgumentException("该文件路径不存在:" + file.getAbsolutePath());
        }
    }
}


FileSuffixFilter

package com.company.CustomerFileDemo.Filter;

import org.apache.commons.lang3.ObjectUtils;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;

public final class FileSuffixFilter implements FileFilter {

    private List<String> suffixs = new ArrayList<>();

    public FileSuffixFilter(List<String> suffixs) {
        this.suffixs = suffixs;
    }

    @Override
    public boolean accept(File file) {
        if(ObjectUtils.notEqual(file, null)){
            String suffix = file.getName().substring(file.getName().indexOf(".")+1);
            if(suffixs.contains(suffix)){
                return true;
            }else{
                return false;
            }
        }else{
            throw new IllegalArgumentException("该文件路径不存在:" + file.getAbsolutePath());
        }
    }
}

配置类FileConfiguration

package com.company.CustomerFileDemo;

import java.util.List;

public class FileConfiguration {
    /**头路径集合,支持多文件路径过滤*/
    private List<String> urls;
    /**索引为start的头路径开始扫描url*/
    private Integer start;
    /**索引为end的头路径为结束扫描url*/
    private Integer end;

    private FilePolicy filePolicy;

    public FileConfiguration(List<String> urls, Integer start, Integer end) {
        this(urls, start, end, new FilePolicy.PartStorePolicy());
    }

    public FileConfiguration(List<String> urls, Integer start, Integer end, FilePolicy filePolicy) {
        this.urls = urls;
        this.start = start;
        this.end = end;
        this.filePolicy = filePolicy;
    }

    public List<String> getUrls() {
        return urls;
    }

    public void setUrls(List<String> urls) {
        this.urls = urls;
    }

    public Integer getStart() {
        return start;
    }

    public void setStart(Integer start) {
        this.start = start;
    }

    public Integer getEnd() {
        return end;
    }

    public void setEnd(Integer end) {
        this.end = end;
    }

    public FilePolicy getFilePolicy() {
        return filePolicy;
    }

    public void setFilePolicy(FilePolicy filePolicy) {
        this.filePolicy = filePolicy;
    }
}

执行过滤链类FileFilterChainExector

package com.company.CustomerFileDemo;

import java.io.File;
import java.io.FileFilter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class FileFilterChainExector {

    private final List<FileFilter> fileFilterList;
    private final FileConfiguration fileConfiguration;
    public FileFilterChainExector(List<FileFilter> fileFilterList, FileConfiguration fileConfiguration) {
        this.fileFilterList = fileFilterList;
        this.fileConfiguration = fileConfiguration;
    }

    public Map<String, List<File>> executor(){
        Map<String, List<File>> fileMap = new HashMap<>();
        this.fileConfiguration.setEnd(this.fileConfiguration.getEnd()+1 >= this.fileConfiguration.getUrls().size() ? this.fileConfiguration.getUrls().size(): this.fileConfiguration.getEnd()+1);
        List<String> urls = this.fileConfiguration.getUrls().subList(this.fileConfiguration.getStart(), this.fileConfiguration.getEnd());
        for(String url: urls){
            File file = new File(url);
            if(!file.exists()){
                continue;
            }

            FileUtils.recursionFile(file, url, this.fileConfiguration.getFilePolicy(), fileMap, this.fileFilterList);
        }
        return fileMap;
    }

}

策略FilePolicy

package com.company.CustomerFileDemo;

import org.apache.commons.lang3.ObjectUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public interface FilePolicy {
    void executor(String url, File file, Map<String,List<File>> fileMap);
    /**
     * 所有头路径所扫描到满足的文件分开存,key为头路径,value是满足的文件数组
     */
    public static class PartStorePolicy implements  FilePolicy{
        public void executor(String url, File file,Map<String,List<File>> fileMap){
            if(ObjectUtils.notEqual(fileMap.get(url), null)){
                 List<File> fileList = fileMap.get(url);
                 fileList.add(file);
            }else {
                List<File> fileList = new ArrayList<>();
                fileList.add(file);
                fileMap.put(url, fileList);
            }
        }
    }

    /**
     * 将所有头路径扫描到的文件放在同一个集合里
     */
    public static class MergeStorePolicy implements  FilePolicy{

        public void executor(String url, File file,Map<String,List<File>> fileMap){
            if(ObjectUtils.notEqual(fileMap.get(url), null)){
                List<File> fileList = fileMap.get(url);
                fileList.add(file);
               // fileMap.entrySet().
               fileMap.entrySet().stream().reduce((target, source )-> {
                    target.getValue().addAll(source.getValue());
                    return target;
                });
            }else {
                List<File> fileList = new ArrayList<>();
                fileList.add(file);
                fileMap.put(url, fileList);
            }
        }

    }

}

工具FileUtils

package com.company.CustomerFileDemo;

import java.io.File;
import java.io.FileFilter;
import java.util.List;
import java.util.Map;

public class FileUtils {
    public static void recursionFile(File file, String startUrl, FilePolicy filePolicy, Map<String, List<File>> map, List<FileFilter> fileFilterList){
        if(!file.exists()){
            throw new IllegalArgumentException("该文件不存在:" + file.getAbsolutePath());
        }else{
            if(file.isFile() && chainExecutor(file, fileFilterList)){
                filePolicy.executor(startUrl, file, map);
            }else if(file.isDirectory()){
                for(File fileTemp: file.listFiles()){
                    recursionFile(fileTemp, startUrl, filePolicy, map, fileFilterList);
                }
            }
        }
    }
    public static boolean chainExecutor(File file, List<FileFilter> fileFilterList){
        for(FileFilter fileFilter: fileFilterList){
            if(!fileFilter.accept(file)){
                return false;
            }
        }
        return true;
    }
}

管理器FilterManager

package com.company.CustomerFileDemo;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class FilterManager {
    private final static List<FileFilter> fileFilters = new ArrayList<>();

    private FileFilterChainExector fileFilterChainExector = null;

    public FilterManager(FileConfiguration fileConfiguration){
        this.fileFilterChainExector = new FileFilterChainExector(fileFilters, fileConfiguration);
    }


    public void addFilter(FileFilter fileFilter){
        this.fileFilters.add(fileFilter);
    }

    public Map<String, List<File>> startAndGet(){
       return this.fileFilterChainExector.executor();
    }

}

测试代码

package com.company.CustomerFileDemo;

import com.company.CustomerFileDemo.Filter.FileDateFilter;
import com.company.CustomerFileDemo.Filter.FileSizeFilter;
import com.company.CustomerFileDemo.Filter.FileSuffixFilter;

import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        testDate();
    }
    public static void test(){
        List<String> urls = new ArrayList<>();
        urls.add("D:/ESL");
        FileConfiguration fileConfiguration = new FileConfiguration(urls, 0,0);
        FilterManager filterManager = new FilterManager(fileConfiguration);
        Map<String,List<File>> map = filterManager.startAndGet();
        System.out.println(map);
    }

    public static void testSize(){
        List<String> urls = new ArrayList<>();
        urls.add("D:/ESL");
        FileFilter fileFilter = new FileSizeFilter(1L, 1765L);
        FileConfiguration fileConfiguration = new FileConfiguration(urls, 0,0);
        FilterManager filterManager = new FilterManager(fileConfiguration);
        filterManager.addFilter(fileFilter);
        Map<String,List<File>> map = filterManager.startAndGet();
        System.out.println(map);
    }
    public static void testSuffix(){
        List<String> urls = new ArrayList<>();
        urls.add("D:/ESL");
        List<String> suffixs = new ArrayList<>();
        suffixs.add("img");
        FileFilter fileFilter = new FileSuffixFilter(suffixs);
        FileConfiguration fileConfiguration = new FileConfiguration(urls, 0,0);
        FilterManager filterManager = new FilterManager(fileConfiguration);
        filterManager.addFilter(fileFilter);
        Map<String,List<File>> map = filterManager.startAndGet();
        System.out.println(map);
    }

    public  static  void testDate(){
        List<String> urls = new ArrayList<>();
        urls.add("D:/ESL");
        FileFilter fileFilter = new FileDateFilter(1000l,1616995920707L);
        FileConfiguration fileConfiguration = new FileConfiguration(urls, 0,0);
        FilterManager filterManager = new FilterManager(fileConfiguration);
        filterManager.addFilter(fileFilter);
        Map<String,List<File>> map = filterManager.startAndGet();
        System.out.println(map);
    }

    public static void testAll(){
        List<String> urls = new ArrayList<>();
        urls.add("D:/ESL");
        FileFilter fileFilter1 = new FileSizeFilter(1L, 1765L);
        FileFilter fileFilter2 = new FileDateFilter(1000l,1616995920707L);
        List<String> suffixs = new ArrayList<>();
        suffixs.add("img");
        FileFilter fileFilter3 = new FileSuffixFilter(suffixs);
        FileConfiguration fileConfiguration = new FileConfiguration(urls, 0,0);
        FilterManager filterManager = new FilterManager(fileConfiguration);
        filterManager.addFilter(fileFilter1);
        filterManager.addFilter(fileFilter2);
        filterManager.addFilter(fileFilter3);
        Map<String,List<File>> map = filterManager.startAndGet();
        System.out.println(map);
    }
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不穿铠甲的穿山甲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值