The process is a slow one. But you can help yourself by printing progress updates. First, add two fields:
The divisor may be different depending on how fast your computer is. Lower the divisor for faster display; raise it for slower. Now add this to your postVisitDirectory() method:
You'll get a display of the folder that the program is currently processing.
All things are lawful, but not all things are profitable.
I'm not sure how much of a speed improvement this would make, but you are calling toAbsolutePath() twice. In the first case you are populating "fileString" and then using endsWith() against that. If you only need to find the file name and not the name plus part of the path then the first call to toAbsolutePath() is overkill, you don't actually care what the "path" is, only the file name. Only when you've determined that you've found the file you're looking for, then call toAbsolutePath().
This is one of those cases where I'd have to convince myself that this approach is faster (at least not slower) than writing a recursive search method.