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);
        }
    }
}
相關文章
相關標籤/搜索