| java.lang.Object org.apache.tools.ant.DirectoryScanner
All known Subclasses: org.apache.tools.ant.types.optional.depend.DependScanner, org.apache.tools.ant.types.ArchiveScanner,
DirectoryScanner | public class DirectoryScanner implements FileScanner,SelectorScanner,ResourceFactory(Code) | | Class for scanning a directory for files/directories which match certain
criteria.
These criteria consist of selectors and patterns which have been specified.
With the selectors you can select which files you want to have included.
Files which are not selected are excluded. With patterns you can include
or exclude files based on their filename.
The idea is simple. A given directory is recursively scanned for all files
and directories. Each file/directory is matched against a set of selectors,
including special support for matching against filenames with include and
and exclude patterns. Only files/directories which match at least one
pattern of the include pattern list or other file selector, and don't match
any pattern of the exclude pattern list or fail to match against a required
selector will be placed in the list of files/directories found.
When no list of include patterns is supplied, "**" will be used, which
means that everything will be matched. When no list of exclude patterns is
supplied, an empty list is used, such that nothing will be excluded. When
no selectors are supplied, none are applied.
The filename pattern matching is done as follows:
The name to be matched is split up in path segments. A path segment is the
name of a directory or file, which is bounded by
File.separator ('/' under UNIX, '\' under Windows).
For example, "abc/def/ghi/xyz.java" is split up in the segments "abc",
"def","ghi" and "xyz.java".
The same is done for the pattern against which should be matched.
The segments of the name and the pattern are then matched against each
other. When '**' is used for a path segment in the pattern, it matches
zero or more path segments of the name.
There is a special case regarding the use of File.separator s
at the beginning of the pattern and the string to match:
When a pattern starts with a File.separator , the string
to match must also start with a File.separator .
When a pattern does not start with a File.separator , the
string to match may not start with a File.separator .
When one of these rules is not obeyed, the string will not
match.
When a name path segment is matched against a pattern path segment, the
following special characters can be used:
'*' matches zero or more characters
'?' matches one character.
Examples:
"**\*.class" matches all .class files/dirs in a directory tree.
"test\a??.java" matches all files/dirs which start with an 'a', then two
more characters and then ".java", in a directory called test.
"**" matches everything in a directory tree.
"**\test\**\XYZ*" matches all files/dirs which start with "XYZ" and where
there is a parent directory called test (e.g. "abc\test\def\ghi\XYZ123").
Case sensitivity may be turned off if necessary. By default, it is
turned on.
Example of usage:
String[] includes = {"**\\*.class"};
String[] excludes = {"modules\\*\\**"};
ds.setIncludes(includes);
ds.setExcludes(excludes);
ds.setBasedir(new File("test"));
ds.setCaseSensitive(true);
ds.scan();
System.out.println("FILES:");
String[] files = ds.getIncludedFiles();
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
This will scan a directory called test for .class files, but excludes all
files in all proper subdirectories of a directory called "modules"
|
Field Summary | |
final protected static String[] | DEFAULTEXCLUDES Patterns which should be excluded by default.
Note that you can now add patterns to the list of default
excludes. | protected File | basedir The base directory to be scanned. | protected Vector | dirsDeselected The directories which matched at least one include and no excludes
but which a selector discarded. | protected Vector | dirsExcluded The directories which matched at least one include and at least one
exclude. | protected Vector | dirsIncluded The directories which matched at least one include and no excludes
and were selected. | protected Vector | dirsNotIncluded The directories which were found and did not match any includes. | protected boolean | everythingIncluded Whether or not everything tested so far has been included. | protected String[] | excludes The patterns for the files to be excluded. | protected Vector | filesDeselected The files which matched at least one include and no excludes and
which a selector discarded. | protected Vector | filesExcluded The files which matched at least one include and at least
one exclude. | protected Vector | filesIncluded The files which matched at least one include and no excludes
and were selected. | protected Vector | filesNotIncluded The files which did not match any includes or selectors. | protected boolean | haveSlowResults Whether or not our results were built by a slow scan. | protected String[] | includes The patterns for the files to be included. | protected boolean | isCaseSensitive Whether or not the file system should be treated as a case sensitive
one. | protected FileSelector[] | selectors Selectors that will filter which files are in our candidate list. |
Method Summary | |
public static boolean | addDefaultExclude(String s) Add a pattern to the default excludes unless it is already a
default exclude.
Parameters: s - A string to add as an exclude pattern. | public synchronized void | addDefaultExcludes() Add default exclusions to the current exclusions set. | public synchronized void | addExcludes(String[] excludes) Add to the list of exclude patterns to use. | protected synchronized void | clearResults() Clear the result caches for a scan. | protected boolean | couldHoldIncluded(String name) Test whether or not a name matches the start of at least one include
pattern.
Parameters: name - The name to match. | public synchronized File | getBasedir() Return the base directory to be scanned. | public static String[] | getDefaultExcludes() Get the list of patterns that should be excluded by default. | public synchronized String[] | getDeselectedDirectories() Return the names of the directories which were selected out and
therefore not ultimately included.
The names are relative to the base directory. | public synchronized String[] | getDeselectedFiles() Return the names of the files which were selected out and
therefore not ultimately included.
The names are relative to the base directory. | public synchronized String[] | getExcludedDirectories() Return the names of the directories which matched at least one of the
include patterns and at least one of the exclude patterns.
The names are relative to the base directory. | public synchronized String[] | getExcludedFiles() Return the names of the files which matched at least one of the
include patterns and at least one of the exclude patterns.
The names are relative to the base directory. | public synchronized String[] | getIncludedDirectories() Return the names of the directories which matched at least one of the
include patterns and none of the exclude patterns. | public synchronized int | getIncludedDirsCount() Return the count of included directories. | public synchronized String[] | getIncludedFiles() Return the names of the files which matched at least one of the
include patterns and none of the exclude patterns. | public synchronized int | getIncludedFilesCount() Return the count of included files. | public synchronized String[] | getNotIncludedDirectories() Return the names of the directories which matched none of the include
patterns. | public synchronized String[] | getNotIncludedFiles() Return the names of the files which matched none of the include
patterns. | public synchronized Resource | getResource(String name) Get the named resource.
Parameters: name - path name of the file relative to the dir attribute. | Set | getScannedDirs() This method is of interest for testing purposes. | public synchronized boolean | isCaseSensitive() Find out whether include exclude patterns are matched in a
case sensitive way. | public synchronized boolean | isEverythingIncluded() Return whether or not the scanner has included all the files or
directories it has come across so far. | protected boolean | isExcluded(String name) Test whether or not a name matches against at least one exclude
pattern.
Parameters: name - The name to match. | public synchronized boolean | isFollowSymlinks() Get whether or not a DirectoryScanner follows symbolic links. | protected boolean | isIncluded(String name) Test whether or not a name matches against at least one include
pattern.
Parameters: name - The name to match. | protected boolean | isSelected(String name, File file) Test whether a file should be selected.
Parameters: name - the filename to check for selecting. Parameters: file - the java.io.File object for this filename. | public static boolean | match(String pattern, String str) Test whether or not a string matches against a pattern.
The pattern may contain two special characters:
'*' means zero or more characters
'?' means one and only one character
Parameters: pattern - The pattern to match against.Must not be null . Parameters: str - The string which must be matched against the pattern.Must not be null . | protected static boolean | match(String pattern, String str, boolean isCaseSensitive) Test whether or not a string matches against a pattern.
The pattern may contain two special characters:
'*' means zero or more characters
'?' means one and only one character
Parameters: pattern - The pattern to match against.Must not be null . Parameters: str - The string which must be matched against the pattern.Must not be null . Parameters: isCaseSensitive - Whether or not matching should be performedcase sensitively. | protected static boolean | matchPath(String pattern, String str) Test whether or not a given path matches a given pattern.
Parameters: pattern - The pattern to match against. | protected static boolean | matchPath(String pattern, String str, boolean isCaseSensitive) Test whether or not a given path matches a given pattern.
Parameters: pattern - The pattern to match against. | protected static boolean | matchPatternStart(String pattern, String str) Test whether or not a given path matches the start of a given
pattern up to the first "**".
This is not a general purpose test and should only be used if you
can live with false positives. | protected static boolean | matchPatternStart(String pattern, String str, boolean isCaseSensitive) Test whether or not a given path matches the start of a given
pattern up to the first "**".
This is not a general purpose test and should only be used if you
can live with false positives. | public static boolean | removeDefaultExclude(String s) Remove a string if it is a default exclude.
Parameters: s - The string to attempt to remove. | public static void | resetDefaultExcludes() Go back to the hardwired default exclude patterns. | public void | scan() Scan for files which match at least one include pattern and don't match
any exclude patterns. | protected void | scandir(File dir, String vpath, boolean fast) Scan the given directory for files and directories. | public void | setBasedir(String basedir) Set the base directory to be scanned. | public synchronized void | setBasedir(File basedir) Set the base directory to be scanned. | public synchronized void | setCaseSensitive(boolean isCaseSensitive) Set whether or not include and exclude patterns are matched
in a case sensitive way. | public synchronized void | setExcludes(String[] excludes) Set the list of exclude patterns to use. | public synchronized void | setFollowSymlinks(boolean followSymlinks) Set whether or not symbolic links should be followed. | public synchronized void | setIncludes(String[] includes) Set the list of include patterns to use. | public synchronized void | setSelectors(FileSelector[] selectors) Set the selectors that will select the filelist. | protected void | slowScan() Top level invocation for a slow scan. |
DEFAULTEXCLUDES | final protected static String[] DEFAULTEXCLUDES(Code) | | Patterns which should be excluded by default.
Note that you can now add patterns to the list of default
excludes. Added patterns will not become part of this array
that has only been kept around for backwards compatibility
reasons.
DirectoryScanner.getDefaultExcludes getDefaultExcludes |
basedir | protected File basedir(Code) | | The base directory to be scanned.
|
dirsDeselected | protected Vector dirsDeselected(Code) | | The directories which matched at least one include and no excludes
but which a selector discarded.
|
dirsExcluded | protected Vector dirsExcluded(Code) | | The directories which matched at least one include and at least one
exclude.
|
dirsIncluded | protected Vector dirsIncluded(Code) | | The directories which matched at least one include and no excludes
and were selected.
|
dirsNotIncluded | protected Vector dirsNotIncluded(Code) | | The directories which were found and did not match any includes.
|
everythingIncluded | protected boolean everythingIncluded(Code) | | Whether or not everything tested so far has been included.
|
excludes | protected String[] excludes(Code) | | The patterns for the files to be excluded.
|
filesDeselected | protected Vector filesDeselected(Code) | | The files which matched at least one include and no excludes and
which a selector discarded.
|
filesExcluded | protected Vector filesExcluded(Code) | | The files which matched at least one include and at least
one exclude.
|
filesIncluded | protected Vector filesIncluded(Code) | | The files which matched at least one include and no excludes
and were selected.
|
filesNotIncluded | protected Vector filesNotIncluded(Code) | | The files which did not match any includes or selectors.
|
haveSlowResults | protected boolean haveSlowResults(Code) | | Whether or not our results were built by a slow scan.
|
includes | protected String[] includes(Code) | | The patterns for the files to be included.
|
isCaseSensitive | protected boolean isCaseSensitive(Code) | | Whether or not the file system should be treated as a case sensitive
one.
|
selectors | protected FileSelector[] selectors(Code) | | Selectors that will filter which files are in our candidate list.
|
DirectoryScanner | public DirectoryScanner()(Code) | | Sole constructor.
|
addDefaultExclude | public static boolean addDefaultExclude(String s)(Code) | | Add a pattern to the default excludes unless it is already a
default exclude.
Parameters: s - A string to add as an exclude pattern. true if the string was added;false if it already existed. since: Ant 1.6 |
addDefaultExcludes | public synchronized void addDefaultExcludes()(Code) | | Add default exclusions to the current exclusions set.
|
addExcludes | public synchronized void addExcludes(String[] excludes)(Code) | | Add to the list of exclude patterns to use. All '/' and '\'
characters are replaced by File.separatorChar , so
the separator used need not match File.separatorChar .
When a pattern ends with a '/' or '\', "**" is appended.
Parameters: excludes - A list of exclude patterns.May be null , in which case theexclude patterns don't get changed at all. since: Ant 1.6.3 |
clearResults | protected synchronized void clearResults()(Code) | | Clear the result caches for a scan.
|
couldHoldIncluded | protected boolean couldHoldIncluded(String name)(Code) | | Test whether or not a name matches the start of at least one include
pattern.
Parameters: name - The name to match. Must not be null . true when the name matches against the start of atleast one include pattern, or false otherwise. |
getBasedir | public synchronized File getBasedir()(Code) | | Return the base directory to be scanned.
This is the directory which is scanned recursively.
the base directory to be scanned. |
getDefaultExcludes | public static String[] getDefaultExcludes()(Code) | | Get the list of patterns that should be excluded by default.
An array of String based on the currentcontents of the defaultExcludes Vector . since: Ant 1.6 |
getDeselectedDirectories | public synchronized String[] getDeselectedDirectories()(Code) | | Return the names of the directories which were selected out and
therefore not ultimately included.
The names are relative to the base directory. This involves
performing a slow scan if one has not already been completed.
the names of the directories which were deselected. See Also: DirectoryScanner.slowScan |
getDeselectedFiles | public synchronized String[] getDeselectedFiles()(Code) | | Return the names of the files which were selected out and
therefore not ultimately included.
The names are relative to the base directory. This involves
performing a slow scan if one has not already been completed.
the names of the files which were deselected. See Also: DirectoryScanner.slowScan |
getExcludedDirectories | public synchronized String[] getExcludedDirectories()(Code) | | Return the names of the directories which matched at least one of the
include patterns and at least one of the exclude patterns.
The names are relative to the base directory. This involves
performing a slow scan if one has not already been completed.
the names of the directories which matched at least one of theinclude patterns and at least one of the exclude patterns. See Also: DirectoryScanner.slowScan |
getExcludedFiles | public synchronized String[] getExcludedFiles()(Code) | | Return the names of the files which matched at least one of the
include patterns and at least one of the exclude patterns.
The names are relative to the base directory. This involves
performing a slow scan if one has not already been completed.
the names of the files which matched at least one of theinclude patterns and at least one of the exclude patterns. See Also: DirectoryScanner.slowScan |
getIncludedDirectories | public synchronized String[] getIncludedDirectories()(Code) | | Return the names of the directories which matched at least one of the
include patterns and none of the exclude patterns.
The names are relative to the base directory.
the names of the directories which matched at least one of theinclude patterns and none of the exclude patterns. |
getIncludedDirsCount | public synchronized int getIncludedDirsCount()(Code) | | Return the count of included directories.
int . since: Ant 1.6.3 |
getIncludedFiles | public synchronized String[] getIncludedFiles()(Code) | | Return the names of the files which matched at least one of the
include patterns and none of the exclude patterns.
The names are relative to the base directory.
the names of the files which matched at least one of theinclude patterns and none of the exclude patterns. |
getIncludedFilesCount | public synchronized int getIncludedFilesCount()(Code) | | Return the count of included files.
int . since: Ant 1.6.3 |
getNotIncludedDirectories | public synchronized String[] getNotIncludedDirectories()(Code) | | Return the names of the directories which matched none of the include
patterns. The names are relative to the base directory. This involves
performing a slow scan if one has not already been completed.
the names of the directories which matched none of the includepatterns. See Also: DirectoryScanner.slowScan |
getNotIncludedFiles | public synchronized String[] getNotIncludedFiles()(Code) | | Return the names of the files which matched none of the include
patterns. The names are relative to the base directory. This involves
performing a slow scan if one has not already been completed.
the names of the files which matched none of the includepatterns. See Also: DirectoryScanner.slowScan |
getResource | public synchronized Resource getResource(String name)(Code) | | Get the named resource.
Parameters: name - path name of the file relative to the dir attribute. the resource with the given name. since: Ant 1.5.2 |
getScannedDirs | Set getScannedDirs()(Code) | | This method is of interest for testing purposes. The returned
Set is live and should not be modified.
the Set of relative directory names that have been scanned. |
isCaseSensitive | public synchronized boolean isCaseSensitive()(Code) | | Find out whether include exclude patterns are matched in a
case sensitive way.
whether or not the scanning is case sensitive. since: Ant 1.6 |
isEverythingIncluded | public synchronized boolean isEverythingIncluded()(Code) | | Return whether or not the scanner has included all the files or
directories it has come across so far.
true if all files and directories which havebeen found so far have been included. |
isExcluded | protected boolean isExcluded(String name)(Code) | | Test whether or not a name matches against at least one exclude
pattern.
Parameters: name - The name to match. Must not be null . true when the name matches against at least oneexclude pattern, or false otherwise. |
isFollowSymlinks | public synchronized boolean isFollowSymlinks()(Code) | | Get whether or not a DirectoryScanner follows symbolic links.
flag indicating whether symbolic links should be followed. since: Ant 1.6 |
isIncluded | protected boolean isIncluded(String name)(Code) | | Test whether or not a name matches against at least one include
pattern.
Parameters: name - The name to match. Must not be null . true when the name matches against at least oneinclude pattern, or false otherwise. |
isSelected | protected boolean isSelected(String name, File file)(Code) | | Test whether a file should be selected.
Parameters: name - the filename to check for selecting. Parameters: file - the java.io.File object for this filename. false when the selectors says that the fileshould not be selected, true otherwise. |
match | public static boolean match(String pattern, String str)(Code) | | Test whether or not a string matches against a pattern.
The pattern may contain two special characters:
'*' means zero or more characters
'?' means one and only one character
Parameters: pattern - The pattern to match against.Must not be null . Parameters: str - The string which must be matched against the pattern.Must not be null . true if the string matches against the pattern,or false otherwise. |
match | protected static boolean match(String pattern, String str, boolean isCaseSensitive)(Code) | | Test whether or not a string matches against a pattern.
The pattern may contain two special characters:
'*' means zero or more characters
'?' means one and only one character
Parameters: pattern - The pattern to match against.Must not be null . Parameters: str - The string which must be matched against the pattern.Must not be null . Parameters: isCaseSensitive - Whether or not matching should be performedcase sensitively. true if the string matches against the pattern,or false otherwise. |
matchPath | protected static boolean matchPath(String pattern, String str)(Code) | | Test whether or not a given path matches a given pattern.
Parameters: pattern - The pattern to match against. Must not benull . Parameters: str - The path to match, as a String. Must not benull . true if the pattern matches against the string,or false otherwise. |
matchPath | protected static boolean matchPath(String pattern, String str, boolean isCaseSensitive)(Code) | | Test whether or not a given path matches a given pattern.
Parameters: pattern - The pattern to match against. Must not benull . Parameters: str - The path to match, as a String. Must not benull . Parameters: isCaseSensitive - Whether or not matching should be performedcase sensitively. true if the pattern matches against the string,or false otherwise. |
matchPatternStart | protected static boolean matchPatternStart(String pattern, String str)(Code) | | Test whether or not a given path matches the start of a given
pattern up to the first "**".
This is not a general purpose test and should only be used if you
can live with false positives. For example, pattern=**\a
and str=b will yield true .
Parameters: pattern - The pattern to match against. Must not benull . Parameters: str - The path to match, as a String. Must not benull . whether or not a given path matches the start of a givenpattern up to the first "**". |
matchPatternStart | protected static boolean matchPatternStart(String pattern, String str, boolean isCaseSensitive)(Code) | | Test whether or not a given path matches the start of a given
pattern up to the first "**".
This is not a general purpose test and should only be used if you
can live with false positives. For example, pattern=**\a
and str=b will yield true .
Parameters: pattern - The pattern to match against. Must not benull . Parameters: str - The path to match, as a String. Must not benull . Parameters: isCaseSensitive - Whether or not matching should be performedcase sensitively. whether or not a given path matches the start of a givenpattern up to the first "**". |
removeDefaultExclude | public static boolean removeDefaultExclude(String s)(Code) | | Remove a string if it is a default exclude.
Parameters: s - The string to attempt to remove. true if s was a defaultexclude (and thus was removed);false if s was notin the default excludes list to begin with. since: Ant 1.6 |
resetDefaultExcludes | public static void resetDefaultExcludes()(Code) | | Go back to the hardwired default exclude patterns.
since: Ant 1.6 |
scan | public void scan() throws IllegalStateException(Code) | | Scan for files which match at least one include pattern and don't match
any exclude patterns. If there are selectors then the files must pass
muster there, as well. Scans under basedir, if set; otherwise the
include patterns without leading wildcards specify the absolute paths of
the files that may be included.
exception: IllegalStateException - if the base directory was setincorrectly (i.e. if it doesn't exist or isn't a directory). |
setBasedir | public void setBasedir(String basedir)(Code) | | Set the base directory to be scanned. This is the directory which is
scanned recursively. All '/' and '\' characters are replaced by
File.separatorChar , so the separator used need not match
File.separatorChar .
Parameters: basedir - The base directory to scan. |
setBasedir | public synchronized void setBasedir(File basedir)(Code) | | Set the base directory to be scanned. This is the directory which is
scanned recursively.
Parameters: basedir - The base directory for scanning. |
setCaseSensitive | public synchronized void setCaseSensitive(boolean isCaseSensitive)(Code) | | Set whether or not include and exclude patterns are matched
in a case sensitive way.
Parameters: isCaseSensitive - whether or not the file system should beregarded as a case sensitive one. |
setExcludes | public synchronized void setExcludes(String[] excludes)(Code) | | Set the list of exclude patterns to use. All '/' and '\' characters
are replaced by File.separatorChar , so the separator used
need not match File.separatorChar .
When a pattern ends with a '/' or '\', "**" is appended.
Parameters: excludes - A list of exclude patterns.May be null , indicating that no filesshould be excluded. If a non-null list isgiven, all elements must be non-null . |
setFollowSymlinks | public synchronized void setFollowSymlinks(boolean followSymlinks)(Code) | | Set whether or not symbolic links should be followed.
Parameters: followSymlinks - whether or not symbolic links should be followed. |
setIncludes | public synchronized void setIncludes(String[] includes)(Code) | | Set the list of include patterns to use. All '/' and '\' characters
are replaced by File.separatorChar , so the separator used
need not match File.separatorChar .
When a pattern ends with a '/' or '\', "**" is appended.
Parameters: includes - A list of include patterns.May be null , indicating that all filesshould be included. If a non-null list is given, all elements must benon-null . |
setSelectors | public synchronized void setSelectors(FileSelector[] selectors)(Code) | | Set the selectors that will select the filelist.
Parameters: selectors - specifies the selectors to be invoked on a scan. |
slowScan | protected void slowScan()(Code) | | Top level invocation for a slow scan. A slow scan builds up a full
list of excluded/included files/directories, whereas a fast scan
will only have full results for included files, as it ignores
directories which can't possibly hold any included files/directories.
Returns immediately if a slow scan has already been completed.
|
|
|