Witam, mam pytanie - trafilem na taki kod:
import java.util.regex.*;
import java.io.*;
import java.util.*;
public class DirList {
public static void main(String[] args) {
File path = new File(".");
String[] list;
if (args.length == 0)
list = path.list();
else
list = path.list(new DirFilter(args[0]));
Arrays.sort(list, String.CASE_INSENSETIVE_ORDER);
for (String dirItem : list)
System.out.println(dirItem);
}
}
class DirFilter implements FilenameFilter {
private Pattern pattern;
public DirFilter(String regex) {
pattern = Pattern.compile(regex);
}
public boolean accept(File dir, String name) {
return pattern.matcher(name).matches();
}
}
Czegos jednak nie rozumiem. Widze, ze wywolywana jest przeladowana metoda list ktorej parametrem jest objekt implementujacy interfejs FilenameFilter. Tworzony jest obiekt typu File ze sciezka ".", czyli biezacy katalog, i gdy nie podam zadnego argumentu, to zostanie wykonane.
Nie rozumiem jednak tego - metoda "accept" nie jest nigdzie wywolywana. Tworzony jest obiekt typu DirFilter, ktorego konstruktor przyjmuje jako argument wyrazenie regularne, np rozszerzenie pliku, czy cokolwiek innego. Metoda "accept" jest wywolywana (wedlug dokumentacji) dla kazdego pliku w danym katalogu, sprawdzane jest czy accept zwraca true czy false, i gdy zwroci true - plik jest dodawany do listy list. Jednak nie jest przekazane metodzie accept nic, ani nie jest wywolana, a w dodatku argument File dir - nie jest nigdzie uzyty.
Ktos moglby wyjasnic jak to dokladnie dziala?