FileFilter
File [] listFiles(FileFilter filter)
は、この抽象パス名で表される指定されたフィルターを満たすディレクトリ内のファイルとディレクトリを表す、抽象パス名の配列を返します。
FileFilterインターフェイスを実装するための実装クラスを作成します
java.io
インターフェイスFileFilter抽象パス名フィルター。
boolean accept(File pathname)
は、指定された抽象パス名をパス名リストに含める必要があるかどうかをテストします。
File [] listFiles(FilenameFilter filter)
は、抽象パス名の配列を返します。これは、この抽象パス名で表される指定されたフィルターを満たすディレクトリ内のファイルとディレクトリを表します。
実装クラスコード:
public class Demo09FilterImpl implements FileFilter {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory())
return true;
return pathname.toString().endsWith(".java");
}
}
コードの意味:ファイルがフォルダーの場合は返され、javaサフィックスが付いたファイルの場合も返されます。つまり、test classメソッドでは、listFilesでフォルダーとjavaファイルのみを選択できます。ListFilesは前の章で紹介されました!
テストコード:
public class Demo09FileFilter {
public static void main(String[] args) {
File file = new File("E:\\xpu\\ideaproject\\20190905\\src\\cn\\itcast\\File");
digui(file);
}
public static void digui(File dir)
{
File[] files = dir.listFiles(new Demo09FilterImpl());//加载过滤器实现类
for (File f :
files) {
if(f.isDirectory())//判断是否为文件夹,如果是
digui(f);//使用递归,继续遍历其中的文件
else {
String s = f.toString();
boolean b = s.endsWith(".txt");
if (b)
System.out.println(f);
}
}
}
}
効果のデモンストレーション:
プロセスは終了コード0で終了しまし
た。javaファイルとフォルダーはフィルター処理されておらず、txtテキストファイルもないため、印刷結果はありません。
匿名の内部クラスを使用してファイルフィルターを実装する
コード:
public class Demo10FileFilterannoy {
public static void main(String[] args) {
File file = new File("E:\\xpu\\ideaproject\\20190905\\src\\cn\\itcast\\File");
digui(file);
}
public static void digui(File dir)
{
/* File[] files = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if(pathname.isDirectory())
return true;
return pathname.toString().endsWith(".java");
}
});//加载过滤器实现类*/
//使用lambda
/*File[] files = dir.listFiles((pathname)->{
{
if(pathname.isDirectory())
return true;
return pathname.toString().endsWith(".java");
}
});//加载过滤器实现类*/
//简化lambda
/* File[] files = dir.listFiles((pathname)-> pathname.isDirectory()||pathname.toString().endsWith(".java")
);//加载过滤器实现类*/
//第二种过滤器
/*File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File pathname=new File(dir,name);
return pathname.isDirectory()||name.toString().endsWith(".java");
}
});*/
//使用lambda
/* File[] files = dir.listFiles((d, name)-> {
return new File(d,name).isDirectory()||name.toString().endsWith(".java");
});*/
//简化lambda
File[] files = dir.listFiles((d,name)->new File(d,name).isDirectory()||name.toString().endsWith(".java"));
for (File f :
files) {
if(f.isDirectory())//判断是否为文件夹,如果是
digui(f);//使用递归,继续遍历其中的文件
else {
String s = f.toString();
boolean b = s.endsWith(".java");
if (b)
System.out.println(f);
}
}
}
}
その中には、コードを単純化するためのラムダの使用があります。読者は他の記事を検索するように求められます