Java File類學習筆記4:自定義一個類,過濾指定副檔名的檔案
一、FilenameFilter介紹
java.io.File類提供了四個方法用於列舉某個路徑下的檔案和目錄,但不會遞迴列舉子目錄下的內容
其中兩個是列舉路徑下的所有檔案和目錄。
(1)String[]files = f.list();
(2)File[]files = f.listFiles();
另外兩個是列舉路徑滿足指定過濾器的檔案和目錄。
(1)String[]fs = f.list(FilenameFilter filter);
(2)File[]fs = f.listFiles(FileFilter filter);
java.io.FilenameFilter是檔名過濾器,用來過濾不符合規格的檔名,並返回合格的檔案;
FilenameFilter用來把符合要求的檔案或目錄返回;
二、檔名過濾器一般用法
1.實現FilenameFilter介面;
2.覆寫accept方法boolean accept(File dir,String name); //dir表示檔案的當前目錄,name表示檔名;
三、例項
自定義一個類,繼承FileNameFilter類,獲得某一目錄下所有指定副檔名的檔案。
方法一:
/** * 說明: * 自定義FilterByJava類,過濾指定副檔名的檔案 * */ import java.io.File; import java.io.FilenameFilter; public class FilterByJava implements FilenameFilter { private String ext; // ext為需要過濾的條件,比如如果ext =".jpg",則只能返回字尾為jpg的檔案 public FilterByJava(String ext) { this.ext = ext; } public boolean accept(File dir, String name) { // 返回true的檔案則合格 return name.endsWith(ext); } }
方法二:
FilenameFilter是一個介面,所以需要寫一個實現類來實現該介面。我希望實現了該介面的類,可以過濾多種檔案型別。示例程式碼如下:
package com.daxiang.filter; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class FileFilterTool implements FilenameFilter { List<String> types; protected FileFilterTool() { types = new ArrayList<String>(); } protected FileFilterTool(List<String> types) { super(); this.types = types; } public boolean accept(File dir, String filename) { // TODO Auto-generated method stub for (Iterator<String> iterator = types.iterator(); iterator.hasNext();) { String type = (String) iterator.next(); if (filename.endsWith(type)) { return true; } } return false; } /** * 新增指定型別的檔案。 * * @param type 要新增的檔案型別,如".jpg"。 */ public void addType(String type) { types.add(type); } }
在以上程式碼中,為FilenameFilter物件添加了一個成員變數types,以接收指定型別。方法addType(Stringtype)是為過濾器新增需要過濾的檔案型別,其內容為檔案的字尾名,如".jpg"。
public boolean accept(File dir, String filename)是實現FilenameFilter介面時要重寫的方法,用迴圈迭代判斷檔名的字尾名是否為types中的型別,是則返回true。當types中沒有該檔案的字尾名時,返回false。
在定義的類中,構造方法寫了兩個,一個是不帶引數的,此時自己建立一個ArrayList物件,用以儲存檔案型別。另一個是帶List物件引數的,該物件由使用者建立。
使用時程式碼如下:
package com.daxiang.filter;
import java.io.File;
public class Test {
public static void main(String args[]){
String path = "d:\\daxiang";
File file = new File(path);
FileFilterTool filenameFilter = new FileFilterTool();
filenameFilter.addType(".jpg");
filenameFilter.addType(".mp3");
File[] files = file.listFiles(filenameFilter);
for (int i = 0; i < files.length; i++) {
System.out.println(files[i].getName());
}
}
}