• filefiter


    1.写一个类继承与FileFilter

    package com.dream.musicplayer;

    import <a href="http://lib.csdn.net/base/17" class='replace_word' title="Java EE知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.io.File;
    import java.io.FileFilter;

    public class MP3FileFilter implements FileFilter {

    @Override
    public boolean accept(File file) {
    // TODO Auto-generated method stub
    // return false;

    if(file.isDirectory())
    return true;
    else
    {
    String name = file.getName();
    if(name.endsWith(".mp3") || name.endsWith(".mp4"))
    return true;
    else
    return false;
    }

    }

    }

    传一个路径,获取改路径下的所有mp3 and mp4文件

    /**
    * get all the music file in the rootpath.
    * @param rootPath
    */
    public void getAllFilePath(String rootPath)
    {

    File file = new File(rootPath);
    File[] files = file.listFiles(new MP3FileFilter());
    for(int i=0;i<files.length;i++)
    {
    if(files[i].isDirectory())
    {
    getAllFilePath(files[i].getPath());
    }
    else
    {
    mArrayListMusicPaths.add(files[i].getPath());
    mArrayListMusicNames.add(files[i].getName());
    System.out.println(files[i].getPath());
    }
    }


    }

    222222222222222222222222222222222222222222

    1、接口方法accept()中可以自行定义过滤规则
    2、此外,FilenameFilter和FileFilter类似,也提供文件过滤功能

    下面是FileFilter的一个应用案例,列出包含指定关键词的目录和文件

    import java.io.File;
    import java.io.FileFilter;

    public class KeywordFileFilter implements FileFilter {

      private String keyword;

      public KeywordFileFilter(String keyword) {
        this.keyword = keyword;
      }

      public boolean accept(File pathname) {
        return pathname.getName().toLowerCase().indexOf(keyword) >= 0;
      }

      /**
       * 测试方法
       */
      public static void main(String[] args) {
        File path = new File("c:/");
        File[] list = path.listFiles(new KeywordFileFilter("windows"));
        for (int i = 0; i < list.length; i++) {
          System.out.println(list[i].getName());
        }
      }

    }

    3333333333333333333333333333333

    下面的例子中我们创建了一个FileFilter类,此类根据文件名的扩展名是否为.txt来筛选文件。创建FileFilter实例之后需要将此实例作为参数传给File的listFiles(fileFilter)方法,此方法会返回符合条件文件的数组,如下代码示例:

    package cn.outofmemory.examples; import java.io.File; import java.io.FileFilter; /** * * @author outofmemory.cn */ public class FileUtil { public void myListFiles(String dir) { File directory = new File(dir); if (!directory.isDirectory()) { System.out.println("No directory provided"); return; } File[] files = directory.listFiles(filefilter); for (File f : files) { System.out.println(f.getName()); } } //create a FileFilter and override its accept-method FileFilter filefilter = new FileFilter() { public boolean accept(File file) { //if the file extension is .txt return true, else false if (file.getName().endsWith(".txt")) { return true; } return false; } }; public static void main(String[] args) { FileUtil fileutil = new FileUtil(); fileutil.myListFiles("C:\\temp"); } }

    4444444444444444444444444444

    java中Filefilter和Filenamefilter的区别

    两种机制而已,筛选时的参数不同,很多类库都会提供多种调用方式,并无不同,只是适配更多的情况
    FileFilter filefilter = new FileFilter() {

    public boolean accept(File file) {
    //if the file extension is .txt return true, else false
    if (file.getName().endsWith(".txt")) {
    return true;
    }
    return false;
    }
    };

    FilenameFilter filefilter = new FilenameFilter() {

    public boolean accept(File dir, String name) {
    //if the file extension is .txt return true, else false
    return name.endsWith(".txt");
    }
    };

    看到了吧,是接口里方法的参数类型不同,这样你可以选自己需要的接口

    5555555555555555555

    原来用File.list()方法,列出目录下所有的文件。
    现在想列出这个目录下,修改日期在最近一个月的文件。

    请问怎么写文件过滤器?或者用其他什么办法。

    long time = new Date().getTime();  //当前时间

    File[] files = new File("c:/aa").listFiles(); //aa为目录

    List<File> list = new ArrayList<File>();

    for(File file : files){

    long m = file.lastModified(); //文件的修改时间

    long n = 30*24*3600;

    //假设一个月30天,30天以内
    if((time-m) < n){

    //你要干什么在这写。。。

    list.add(file);

    }

    }

    666666666666666666666666




  • 相关阅读:
    堆模板
    二叉树输出
    中序+层次遍历输出前序
    扩展二叉树 (根据特殊的前序遍历建树)
    Leecode no.124 二叉树中的最大路径和
    JVM类加载过程
    Leecode no.208 实现Tire(前缀树)
    Leecode no.300 最长递增子序列
    volatile关键字深入解析 JMM与内存屏障
    Leecode no.200 岛屿数量
  • 原文地址:https://www.cnblogs.com/qq3245792286/p/6212601.html
Copyright © 2020-2023  润新知