java文件操做和文件过滤器

文件操做 

  java提供了File类来供咱们操做文件,FIle是文件或文件夹的抽象表示,也就是对象表示。总结了几个经常使用的方法java

  • File(File parenrt,String child)、FIle(String pathname)、File(String parent,String child),三个构造函数能够多种方式实现实例化。
  • getAbsolutePath():返回此文件或者文件夹的绝对路径
  • getName():返回此文件夹或者文件的名称
  • getPath():返回此文件夹或者文件的表示,也就是构造参数中的参数
  • createNewFIle():建立一个新的文件
  • mkdir():建立新目录,注意只能建立一层,
  • mkdirs():建立多层目录
  • isDirectory():判断是不是一个目录
  • isFile():判断是不是文件
  • list():返回文件或目录的名字的字符串数组
  • listFiles():返回文件或目录的文件对象数组

文件过滤器:

  listFiles()函数返回文件的对象列表,而有时候咱们只须要其中特定的文件,好比说.txt文件,而其他的不用返回,虽然能够在返回后再操做该数组,但这样有点太复杂了,java给咱们提供了俩个接口FilenameFilter和FileFilter,将此接口对象传入到listFiles的参数中,以达到过滤的目的。接口中的accept就是过滤函数,分别对得到的每个文件调用此方法,若返回true,则放入到数组中,反之移除数组

FilenameFilter:

  FilenameFilter过滤器,咱们只能使用文件或者目录的名字,dir参数是文件所在的目前对象,并非文件的FIle对象,全部咱们通常只是使用name参数ide

public interface FilenameFilter {
    boolean accept(File dir, String name);
}

FileFilter:

  FileFilter过滤器,参数pathname便是文件的FIle对象,经过它咱们能够得到文件的一切属性,好比说pathname.getName()就是文件的名字啦,能够变成间接的FIlenameFilter。功能强大函数

public interface FileFilter {
    boolean accept(File pathname);
}

实例:

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

/**
 * 自定义的局部内部类来自定义过滤器类,
 */
public class Generics {
    //自定义过滤器类实现FilenameFilter接口
    static class MyFilenameFilter implements FilenameFilter{
        @Override
        public boolean accept(File dir, String name) {
            return name.endsWith(".java");//只获取.java结尾的文件或目录
        }
    }
    //自定义过滤器类实现FileFilter接口
    static class MyFileFilter implements FileFilter{
        @Override
        public boolean accept(File pathname) {
            return pathname.getName().endsWith(".java");//只获取.java结尾的文件或目录
        }
    }
    public static void main(String[] args) {
        File file =new File("D:");
        //方式一:FileFilter过滤器
        File[] files=file.listFiles(new MyFileFilter());
        for (File f:files){
            System.out.println(f.getName());
        }
        //方式二:FilenameFilter过滤器
        File[] files2=file.listFiles(new MyFilenameFilter());
        for (File f:files2){
            System.out.println(f.getName());
        }
        //list()函数只能接受FilenameFilter对象,匿名内部类的形式实现,
        //或者能够理解为为何既然有FileFilter,而还要FilenameFilter
            //  1.对于listFiles来讲,FilenameFilter能够直接操做name,而不须要经过File对象获取
            //  2.对于list来讲,它只能是FilenameFilter过滤器,由于获得的是String,已经不是File了
        String[] filenames = file.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".java");
            }
        });
        for(String str:filenames){
            System.out.println(str);
        }
    }
}
相关文章
相关标签/搜索