public class Copy extends Task
Copies a file or directory to a new file or directory. Files are only copied if the source file is newer than the destination file, or when the destination file does not exist. It is possible to explicitly overwrite existing files.
This implementation is based on Arnout Kuiper's initial design document, the following mailing list discussions, and the copyfile/copydir tasks.
Modifier and Type | Field and Description |
---|---|
protected Hashtable<File,File> |
completeDirMap |
protected File |
destDir |
protected File |
destFile |
protected Hashtable<String,String[]> |
dirCopyMap |
protected boolean |
failonerror |
protected File |
file |
protected Hashtable<String,String[]> |
fileCopyMap |
protected Vector<ResourceCollection> |
filesets |
protected FileUtils |
fileUtils |
protected boolean |
filtering |
protected boolean |
flatten |
protected boolean |
forceOverwrite |
protected boolean |
includeEmpty |
protected Mapper |
mapperElement |
protected boolean |
preserveLastModified |
protected Vector<ResourceCollection> |
rcs |
protected int |
verbosity |
Constructor and Description |
---|
Copy()
Copy task constructor.
|
Modifier and Type | Method and Description |
---|---|
void |
add(FileNameMapper fileNameMapper)
Add a nested filenamemapper.
|
void |
add(ResourceCollection res)
Add a collection of files to copy.
|
void |
addFileset(FileSet set)
Add a set of files to copy.
|
protected void |
buildMap(File fromDir,
File toDir,
String[] names,
FileNameMapper mapper,
Hashtable<String,String[]> map)
Add to a map of files/directories to copy.
|
protected Map<Resource,String[]> |
buildMap(Resource[] fromResources,
File toDir,
FileNameMapper mapper)
Create a map of resources to copy.
|
FilterChain |
createFilterChain()
Add a FilterChain.
|
FilterSet |
createFilterSet()
Add a filterset.
|
Mapper |
createMapper()
Define the mapper to map source to destination files.
|
protected void |
doFileOperations()
Actually does the file (and possibly empty directory) copies.
|
protected void |
doResourceOperations(Map<Resource,String[]> map)
Actually does the resource copies.
|
void |
execute()
Perform the copy operation.
|
String |
getEncoding()
Get the character encoding to be used.
|
protected FileUtils |
getFileUtils()
Get the FileUtils for this task.
|
protected Vector<FilterChain> |
getFilterChains()
Get the filterchains being applied to this operation.
|
protected Vector<FilterSet> |
getFilterSets()
Get the filtersets being applied to this operation.
|
boolean |
getForce()
Whether read-only destinations will be overwritten.
|
String |
getOutputEncoding()
Get the character encoding for output files.
|
boolean |
getPreserveLastModified()
Get whether to give the copied files the same last modified time as
the original files.
|
boolean |
isEnableMultipleMapping()
Get whether multiple mapping is enabled.
|
protected void |
scan(File fromDir,
File toDir,
String[] files,
String[] dirs)
Compares source files to destination files to see if they should be
copied.
|
protected Map<Resource,String[]> |
scan(Resource[] fromResources,
File toDir)
Compares source resources to destination files to see if they
should be copied.
|
void |
setEnableMultipleMappings(boolean enableMultipleMappings)
Set method of handling mappers that return multiple
mappings for a given source path.
|
void |
setEncoding(String encoding)
Set the character encoding.
|
void |
setFailOnError(boolean failonerror)
Set whether to fail when errors are encountered.
|
void |
setFile(File file)
Set a single source file to copy.
|
void |
setFiltering(boolean filtering)
Set filtering mode.
|
void |
setFlatten(boolean flatten)
Set whether files copied from directory trees will be "flattened"
into a single directory.
|
void |
setForce(boolean f)
Whether read-only destinations will be overwritten.
|
void |
setGranularity(long granularity)
Set the number of milliseconds leeway to give before deciding a
target is out of date.
|
void |
setIncludeEmptyDirs(boolean includeEmpty)
Set whether to copy empty directories.
|
void |
setOutputEncoding(String encoding)
Set the character encoding for output files.
|
void |
setOverwrite(boolean overwrite)
Set overwrite mode regarding existing destination file(s).
|
void |
setPreserveLastModified(boolean preserve)
Give the copied files the same last modified time as the original files.
|
void |
setQuiet(boolean quiet)
Set quiet mode.
|
void |
setTodir(File destDir)
Set the destination directory.
|
void |
setTofile(File destFile)
Set the destination file.
|
void |
setVerbose(boolean verbose)
Set verbose mode.
|
protected boolean |
supportsNonFileResources()
Whether this task can deal with non-file resources.
|
protected void |
validateAttributes()
Ensure we have a consistent and legal set of attributes, and set
any internal flags necessary based on different combinations
of attributes.
|
bindToOwner, getOwningTarget, getRuntimeConfigurableWrapper, getTaskName, getTaskType, getWrapper, handleErrorFlush, handleErrorOutput, handleFlush, handleInput, handleOutput, init, isInvalid, log, log, log, log, maybeConfigure, perform, reconfigure, setOwningTarget, setRuntimeConfigurableWrapper, setTaskName, setTaskType
clone, getDescription, getLocation, getProject, setDescription, setLocation, setProject
protected File destDir
protected File destFile
protected boolean failonerror
protected File file
protected Vector<ResourceCollection> filesets
protected FileUtils fileUtils
protected boolean filtering
protected boolean flatten
protected boolean forceOverwrite
protected boolean includeEmpty
protected Mapper mapperElement
protected boolean preserveLastModified
protected Vector<ResourceCollection> rcs
protected int verbosity
public void add(FileNameMapper fileNameMapper)
fileNameMapper
- the mapper to add.public void add(ResourceCollection res)
res
- a resource collection to copy.public void addFileset(FileSet set)
set
- a set of files to copy.protected void buildMap(File fromDir, File toDir, String[] names, FileNameMapper mapper, Hashtable<String,String[]> map)
fromDir
- the source directory.toDir
- the destination directory.names
- a list of filenames.mapper
- a FileNameMapper
value.map
- a map of source file to array of destination files.protected Map<Resource,String[]> buildMap(Resource[] fromResources, File toDir, FileNameMapper mapper)
fromResources
- The source resources.toDir
- the destination directory.mapper
- a FileNameMapper
value.public FilterChain createFilterChain()
public FilterSet createFilterSet()
public Mapper createMapper() throws BuildException
BuildException
- if more than one mapper is defined.protected void doFileOperations()
protected void doResourceOperations(Map<Resource,String[]> map)
map
- a map of source resource to array of destination files.public void execute() throws BuildException
execute
in class Task
BuildException
- if an error occurs.public String getEncoding()
null
if not set.protected FileUtils getFileUtils()
protected Vector<FilterChain> getFilterChains()
protected Vector<FilterSet> getFilterSets()
public boolean getForce()
public String getOutputEncoding()
null
if not set.public boolean getPreserveLastModified()
public boolean isEnableMultipleMapping()
protected void scan(File fromDir, File toDir, String[] files, String[] dirs)
fromDir
- The source directory.toDir
- The destination directory.files
- A list of files to copy.dirs
- A list of directories to copy.protected Map<Resource,String[]> scan(Resource[] fromResources, File toDir)
fromResources
- The source resources.toDir
- The destination directory.public void setEnableMultipleMappings(boolean enableMultipleMappings)
enableMultipleMappings
- If true the task will
copy to all the mappings for a given source path, if
false, only the first file or directory is
processed.
By default, this setting is false to provide backward
compatibility with earlier releases.public void setEncoding(String encoding)
encoding
- the character encoding.public void setFailOnError(boolean failonerror)
failonerror
- true or false.public void setFile(File file)
file
- the file to copy.public void setFiltering(boolean filtering)
filtering
- if true enable filtering; default is false.public void setFlatten(boolean flatten)
flatten
- if true flatten the destination directory. Default
is false.public void setForce(boolean f)
Defaults to false
public void setGranularity(long granularity)
Default is 1 second, or 2 seconds on DOS systems.
granularity
- the granularity used to decide if a target is out of
date.public void setIncludeEmptyDirs(boolean includeEmpty)
includeEmpty
- if true copy empty directories. Default is true.public void setOutputEncoding(String encoding)
encoding
- the output character encoding.public void setOverwrite(boolean overwrite)
overwrite
- if true force overwriting of destination file(s)
even if the destination file(s) are younger than
the corresponding source file. Default is false.public void setPreserveLastModified(boolean preserve)
preserve
- if true preserve the modified time; default is false.public void setQuiet(boolean quiet)
quiet
- whether or not to display error messages when a file or
directory does not exist. Default is false.public void setTodir(File destDir)
destDir
- the destination directory.public void setTofile(File destFile)
destFile
- the file to copy to.public void setVerbose(boolean verbose)
verbose
- whether to output the names of copied files.
Default is false.protected boolean supportsNonFileResources()
<copy> can while <move> can't since we don't know how to remove non-file resources.
This implementation returns true only if this task is <copy>. Any subclass of this class that also wants to support non-file resources needs to override this method. We need to do so for backwards compatibility reasons since we can't expect subclasses to support resources.
protected void validateAttributes() throws BuildException
BuildException
- if an error occurs.