private Vector extractFiles(File dir) {
        File[] tmp = dir.listFiles(this);

        if ((tmp == null) || (tmp.length == 0)) {
            // unable to find a match
            String tail = "";

            if (!dir.getAbsolutePath().endsWith(sep)) {
                tail = sep;
            }

            matches.add(dir.getAbsolutePath() + tail + expr);

            // rebuild the initial path and store it into the extractedFiles
            extractedFiles.add(dir.getAbsolutePath() + tail + expr);

            return extractedFiles;
        }

        // cycle over the files returned by extractFiles:
        for (int i = 0; i < tmp.length; ++i) {
            File file = tmp[i];

            if (file.isFile()) {
                if (!hSet.add(file.getName())) {
                    // There is already a file with the same simple name in the list, thi is not allowed
                    duplicates.add(file.getName());
                }

                extractedFiles.add(file.getAbsolutePath());

                //  addAttribute (attrName , file.getAbsolutePath()  );
            } else if (file.isDirectory()) {
                // Add All the matching file sof the specified directory
                if ((file.listFiles()).length != 0) {
                    extractFiles(file);
                }
            }
        }

        return extractedFiles;
    }