image provider

Wildcard FilenameFilter


Disclaimer

This essay does not describe an existing computer program, just one that should exist. This essay is about a suggested student project in Java programming. This essay gives a rough overview of how it might work. I have no source, object, specifications, file layouts or anything else useful to implementing this project. Everything I have prepared to help you is right here.

This project outline is not like the artificial, tidy little problems you are spoon-fed in school, when all the facts you need are included, nothing extraneous is mentioned, the answer is fully specified, along with hints to nudge you toward a single expected canonical solution. This project is much more like the real world of messy problems where it is up to you to fully the define the end point, or a series of ever more difficult versions of this project and research the information yourself to solve them.

Everything I have to say to help you with this project is written below. I am not prepared to help you implement it; or give you any additional materials. I have too many other projects of my own.

Though I am a programmer by profession, I don’t do people’s homework for them. That just robs them of an education.

You have my full permission to implement this project in any way you please and to keep all the profits from your endeavour.

Please do not email me about this project without reading the disclaimer above.

The java.io package does not directly support wildcard filters. You have to implement the FilenameFilter interface and write an accept method that examines each filename and decides whether it should be included.

Writing even a simple wildcard filter is a bit of hassle. Have a look at this one that selects all files of the form ?gloss*.html :

Your job is to create a tool for creating FilenameFilter objects specifying only a list of positive and negative wildcards. For example you might use the only a list of positive and negative wildcards. For example you might use the tool like this:

FilenameFilter f = new WildCardFilter( "*.txt,*.doc,*.c*,-*.cnt" );
String[] filenames = new File ( "MyDir" ).list( f );

You process the wildcards in order using an algorithm something like this:

Ideas for speeding up the code:

  1. Create a case-sensitive and case-insensitive version. For the case-insensitive version it is probably best to convert all Strings to upper case before you start.
  2. Consider a coarse prefilter to quickly determine some of the definite yeses and definite nos. For example, you could index into a boolean array using the first character of the extension, to get a definite yes, definite no or definite maybe. Also, you could use such a rough filter to determine which fine filters to bother checking.
  3. Consider treating the filename and extension separately since most wildcards are just lists of extensions.
  4. Consider implementing much the way a parser would, as a finite state machine that changes state depending on what the next letter is.
  5. If you get a hit on a positive wildcard, you can bypass further positive wildcard processing up to the next negative wildcard.
  6. Consider implementing with a regex matcher. That would allow you to have quite elaborate wildcards. You leave the optimisation up to the regex package. Now that Java has a built-in regex package this is by far the easiest way to implement the filters. Your job then becomes documenting how to use the regex package to do all the usual filtering tasks, or alternatively to convert your simple wildcards into true regex patterns.
constellation
Deleter project
Filters

This page is posted
on the web at:

http://mindprod.com/project/wildcard.html

Optional Replicator mirror
of mindprod.com
on local hard disk J:

J:\mindprod\project\wildcard.html
Canadian Mind Products
Please the feedback from other visitors, or your own feedback about the site.
Contact Roedy. Please feel free to link to this page without explicit permission.

IP:[65.110.21.43]
Your face IP:[44.195.47.227]
You are visitor number