java 檔案過濾器的6種實現方法
阿新 • • 發佈:2019-02-06
注:執行環境 IDEA
package fileTest;/**
* Created by peipei.zhou on 14-7-10.
* 條件:java中有一個FilenameFilter的介面,能夠過濾得到指定型別的檔案或者目錄,其中必須重寫accept(File file,String path)方法
*/
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.util.regex.Pattern;
import java.util.regex.*;
import java.io.*;
import java.util.*;
public class fileTest {
public static FilenameFilter
// Creation of anonymous inner class:
return new FilenameFilter() {
private Pattern pattern = Pattern.compile(regex);
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
}; // End of anonymous inner class
}
public static void main(String[] args)
{
File dir = new File("d:/tmp/");
//方法一:
String[] files = dir.list(new MyFilenameFilter());//呼叫過濾器,自動呼叫accept()方法
if (files != null)
{
for (int i = 0; i < files.length; i++)
{
System.out.println(files[i]);//僅僅輸出.sh檔案
}
}
//方法二:內部類實現過濾器
String[] files2 = dir.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith("sh");//或者name.indexOf(".sh")!=-1;
}
} );//呼叫過濾器,自動呼叫accept()方法
if (files2!=null)
{
for (int i = 0; i < files2.length; i++)
{
System.out.println(files2[i]);//僅僅輸出.sh檔案
}
}
//方法三:更通用的寫法
//列出所有.java檔案
String[] files3 = dir.list(new FileNameSelector("sh"));//呼叫過濾器,自動呼叫accept()方法
//File[] files = dir.listFiles(new MyFileFilter());
if (files3!=null)
{
for (int i = 0; i < files3.length; i++)
{
System.out.println(files3[i]);//僅僅輸出.sh檔案
}
}
//方法四:更通用的方法,注意與方法三中定義的過濾器的區別
try{
String[] files4 = dir.list(new DirFilter(".sh"));//呼叫過濾器,自動呼叫accept()方法
//File[] files = dir.listFiles(new MyFileFilter());
if (files4!=null)
{
for (int i = 0; i < files4.length; i++)
{
System.out.println(files4[i]);//僅僅輸出.sh檔案
}
}
}catch(Exception e){
e.printStackTrace();
}
//方法五:正則表示式
String[] files5 = dir.list(new DirFiles(".*[.sh]"));//呼叫過濾器,自動呼叫accept()方法
//File[] files = dir.listFiles(new MyFileFilter());
if (files5!=null)
{
for (int i = 0; i < files5.length; i++)
{
System.out.println(files5[i]);//僅僅輸出.sh檔案
}
}
//方法六:正則表示式+匿名類
String[] files6 = dir.list(filter(".*[.sh]"));//呼叫過濾器,自動呼叫accept()方法
if (files6!=null)
{
for (int i = 0; i < files6.length; i++)
{
System.out.println(files6[i]);//僅僅輸出.sh檔案
}
}
}
}
class MyFilenameFilter implements FilenameFilter
{
public boolean accept(File dir, String name)
{
//System.out.println(dir.getAbsolutePath());
// System.out.println(name);
return name.indexOf(".sh")!=-1;
}
}
class FileNameSelector implements FilenameFilter
{
String extension = ".";
public FileNameSelector(String fileExtensionNoDot)
{
extension += fileExtensionNoDot;
}
@Override
public boolean accept(File dir, String name)
{
return name.endsWith(extension);
}
}
class DirFilter implements FilenameFilter{
private String type;
public DirFilter(String tp){
this.type=tp;
}
public boolean accept(File fl,String path) {
File file=new File(path);
String filename=file.getName();
return filename.indexOf(type)!=-1;
}
}
class DirFiles implements FilenameFilter{
private Pattern pattern;
public DirFiles(String regex)
{
pattern = Pattern.compile(regex);
}
public boolean accept(File dir, String name)
{
return pattern.matcher(name).matches();
}
}