Build an in-memory file lookup tool similar to a Unix "find" command. The system should support two starter Search Criterias and be easy to extend with new Search Criterias later.
Initial Search Criterias
API shape (use Java-style naming):
The design should allow adding new Search Criterias later (for example, a name-substring match).
FileSearch s = new FileSearch();
s.putFile("/data/pics/photoA.jpg", 4);
s.putFile("/data/pics/movie.mp4", 12);
s.putFile("/work/docs/readme.md", 1);
s.putFile("/work/docs/report.xml", 7);
Update (overwrite) size
s.putFile("/data/pics/photoA.jpg", 9);
Search Criteria 1: files > 8 MB inside /data
s.search(1, "/data", "8")
Returns: ["/data/pics/photoA.jpg", "/data/pics/movie.mp4"]
Search Criteria 2: files with ".xml" inside /work
s.search(2, "/work", ".xml")
Returns: ["/work/docs/report.xml"]
FileSearch s = new FileSearch();
s.putFile("/media/images/aa.jpg", 6);
s.putFile("/media/images/ab.jpg", 7);
s.putFile("/media/images/ac.xml", 2);
s.putFile("/office/reports/r1.xml", 9);
s.putFile("/office/reports/r2.xml", 4);
s.putFile("/office/notes.txt", 3);
Search Criteria 1 under a subdirectory
s.search(1, "/media/images", "5")
Returns: ["/media/images/aa.jpg", "/media/images/ab.jpg"]
Search Criteria 2 under a parent directory (recursive)
s.search(2, "/office", ".xml")
Returns: ["/office/reports/r1.xml", "/office/reports/r2.xml"]