org.apache.tools.ant.taskdefs.optional.net

Class FTP

public class FTP extends Task

Basic FTP client. Performs the following actions: Note: Some FTP servers - notably the Solaris server - seem to hold data ports open after a "retr" operation, allowing them to timeout instead of shutting them down cleanly. This happens in active or passive mode, and the ports will remain open even after ending the FTP session. FTP "send" operations seem to close ports immediately. This behavior may cause problems on some systems when downloading large sets of files.

Since: Ant 1.3

Nested Class Summary
static classFTP.Action
an action to perform, one of "send", "put", "recv", "get", "del", "delete", "list", "mkdir", "chmod", "rmdir"
protected classFTP.FTPDirectoryScanner
internal class allowing to read the contents of a remote file system using the FTP protocol used in particular for ftp get operations differences with DirectoryScanner "" (the root of the fileset) is never included in the included directories followSymlinks defaults to false
static classFTP.FTPSystemType
one of the valid system type keys recognized by the systemTypeKey attribute.
static classFTP.Granularity
represents one of the valid timestamp adjustment values recognized by the timestampGranularity attribute.

A timestamp adjustment may be used in file transfers for checking uptodateness.

static classFTP.LanguageCode
Enumerated class for languages.
Field Summary
protected static String[]ACTION_STRS
protected static String[]ACTION_TARGET_STRS
protected static intCHMOD
protected static String[]COMPLETED_ACTION_STRS
static intDEFAULT_FTP_PORT
Default port for FTP
protected static intDEL_FILES
protected static intGET_FILES
protected static intLIST_FILES
protected static intMK_DIR
protected static intRM_DIR
protected static intSEND_FILES
protected static intSITE_CMD
Method Summary
voidaddFileset(FileSet set)
A set of files to upload or download
protected voidcheckAttributes()
Checks to see that all required parameters are set.
protected voidcreateParents(FTPClient ftp, String filename)
Creates all parent directories specified in a complete relative pathname.
protected voiddelFile(FTPClient ftp, String filename)
Delete a file from the remote host.
protected voiddoSiteCommand(FTPClient ftp, String theCMD)
Sends a site command to the ftp server
voidexecute()
Runs the task.
protected voidexecuteRetryable(RetryHandler h, Retryable r, String descr)
Executable a retryable object.
protected voidgetFile(FTPClient ftp, String dir, String filename)
Retrieve a single file from the remote host.
protected booleanisUpToDate(FTPClient ftp, File localFile, String remoteFile)
Checks to see if the remote file is current as compared with the local file.
protected voidlistFile(FTPClient ftp, BufferedWriter bw, String filename)
List information about a single file from the remote host.
protected voidmakeRemoteDir(FTPClient ftp, String dir)
Create the specified directory on the remote host.
protected StringresolveFile(String file)
Correct a file path to correspond to the remote host requirements.
protected voidrmDir(FTPClient ftp, String dirname)
Delete a directory, if empty, from the remote host.
protected voidsendFile(FTPClient ftp, String dir, String filename)
Sends a single file to the remote host.
voidsetAccount(String pAccount)
Sets the login account to use on the specified server.
voidsetAction(String action)
Sets the FTP action to be taken.
voidsetAction(FTP.Action action)
Sets the FTP action to be taken.
voidsetBinary(boolean binary)
If true, uses binary mode, otherwise text mode (default is binary).
voidsetChmod(String theMode)
Sets the file permission mode (Unix only) for files sent to the server.
voidsetDefaultDateFormatConfig(String defaultDateFormat)
Sets the defaultDateFormatConfig attribute.
voidsetDepends(boolean depends)
Set to true to transmit only files that are new or changed from their remote counterparts.
voidsetIgnoreNoncriticalErrors(boolean ignoreNoncriticalErrors)
set the flag to skip errors on directory creation. (and maybe later other server specific errors)
voidsetInitialSiteCommand(String initialCommand)
Sets the initialSiteCommand attribute.
voidsetListing(File listing)
The output file for the "list" action.
voidsetNewer(boolean newer)
A synonym for depends.
voidsetPassive(boolean passive)
Specifies whether to use passive mode.
voidsetPassword(String password)
Sets the login password for the given user id.
voidsetPort(int port)
Sets the FTP port used by the remote server.
voidsetPreserveLastModified(boolean preserveLastModified)
Set to true to preserve modification times for "gotten" files.
voidsetRecentDateFormatConfig(String recentDateFormat)
Sets the recentDateFormatConfig attribute.
voidsetRemotedir(String dir)
Sets the remote directory where files will be placed.
voidsetRetriesAllowed(String retriesAllowed)
Defines how many times to retry executing FTP command before giving up.
voidsetSeparator(String separator)
Sets the remote file separator character.
voidsetServer(String server)
Sets the FTP server to send files to.
voidsetServerLanguageCodeConfig(FTP.LanguageCode serverLanguageCode)
Sets the serverLanguageCode attribute.
voidsetServerTimeZoneConfig(String serverTimeZoneId)
Sets the serverTimeZoneConfig attribute.
voidsetShortMonthNamesConfig(String shortMonthNames)
Sets the shortMonthNamesConfig attribute
voidsetSiteCommand(String siteCommand)
Sets the siteCommand attribute.
voidsetSkipFailedTransfers(boolean skipFailedTransfers)
If true, enables unsuccessful file put, delete and get operations to be skipped with a warning and the remainder of the files still transferred.
voidsetSystemTypeKey(FTP.FTPSystemType systemKey)
Sets the systemTypeKey attribute.
voidsetTimeDiffAuto(boolean timeDiffAuto)
"true" to find out automatically the time difference between local and remote machine.
voidsetTimeDiffMillis(long timeDiffMillis)
number of milliseconds to add to the time on the remote machine to get the time on the local machine. use in conjunction with newer
voidsetTimestampGranularity(FTP.Granularity timestampGranularity)
Sets the timestampGranularity attribute
voidsetUmask(String theUmask)
Sets the default mask for file creation on a unix server.
voidsetUserid(String userid)
Sets the login user id to use on the specified server.
voidsetVerbose(boolean verbose)
Set to true to receive notification about each file as it is transferred.
protected inttransferFiles(FTPClient ftp, FileSet fs)
For each file in the fileset, do the appropriate action: send, get, delete, or list.
protected voidtransferFiles(FTPClient ftp)
Sends all files specified by the configured filesets to the remote server.

Field Detail

ACTION_STRS

protected static final String[] ACTION_STRS

ACTION_TARGET_STRS

protected static final String[] ACTION_TARGET_STRS

CHMOD

protected static final int CHMOD

COMPLETED_ACTION_STRS

protected static final String[] COMPLETED_ACTION_STRS

DEFAULT_FTP_PORT

public static final int DEFAULT_FTP_PORT
Default port for FTP

DEL_FILES

protected static final int DEL_FILES

GET_FILES

protected static final int GET_FILES

LIST_FILES

protected static final int LIST_FILES

MK_DIR

protected static final int MK_DIR

RM_DIR

protected static final int RM_DIR

SEND_FILES

protected static final int SEND_FILES

SITE_CMD

protected static final int SITE_CMD

Method Detail

addFileset

public void addFileset(FileSet set)
A set of files to upload or download

Parameters: set the set of files to be added to the list of files to be transferred.

checkAttributes

protected void checkAttributes()
Checks to see that all required parameters are set.

Throws: BuildException if the configuration is not valid.

createParents

protected void createParents(FTPClient ftp, String filename)
Creates all parent directories specified in a complete relative pathname. Attempts to create existing directories will not cause errors.

Parameters: ftp the FTP client instance to use to execute FTP actions on the remote server. filename the name of the file whose parents should be created.

Throws: IOException under non documented circumstances BuildException if it is impossible to cd to a remote directory

delFile

protected void delFile(FTPClient ftp, String filename)
Delete a file from the remote host.

Parameters: ftp ftp client filename file to delete

Throws: IOException in unknown circumstances BuildException if skipFailedTransfers is set to false and the deletion could not be done

doSiteCommand

protected void doSiteCommand(FTPClient ftp, String theCMD)
Sends a site command to the ftp server

Parameters: ftp ftp client theCMD command to execute

Throws: IOException in unknown circumstances BuildException in unknown circumstances

execute

public void execute()
Runs the task.

Throws: BuildException if the task fails or is not configured correctly.

executeRetryable

protected void executeRetryable(RetryHandler h, Retryable r, String descr)
Executable a retryable object.

Parameters: h the retry hander. r the object that should be retried until it succeeds or the number of retrys is reached. descr a description of the command that is being run.

Throws: IOException if there is a problem.

getFile

protected void getFile(FTPClient ftp, String dir, String filename)
Retrieve a single file from the remote host. filename may contain a relative path specification.

The file will then be retreived using the entire relative path spec - no attempt is made to change directories. It is anticipated that this may eventually cause problems with some FTP servers, but it simplifies the coding.

Parameters: ftp the ftp client dir local base directory to which the file should go back filename relative path of the file based upon the ftp remote directory and/or the local base directory (dir)

Throws: IOException in unknown circumstances BuildException if skipFailedTransfers is false and the file cannot be retrieved.

isUpToDate

protected boolean isUpToDate(FTPClient ftp, File localFile, String remoteFile)
Checks to see if the remote file is current as compared with the local file. Returns true if the target file is up to date.

Parameters: ftp ftpclient localFile local file remoteFile remote file

Returns: true if the target file is up to date

Throws: IOException in unknown circumstances BuildException if the date of the remote files cannot be found and the action is GET_FILES

listFile

protected void listFile(FTPClient ftp, BufferedWriter bw, String filename)
List information about a single file from the remote host. filename may contain a relative path specification.

The file listing will then be retrieved using the entire relative path spec - no attempt is made to change directories. It is anticipated that this may eventually cause problems with some FTP servers, but it simplifies the coding.

Parameters: ftp ftp client bw buffered writer filename the directory one wants to list

Throws: IOException in unknown circumstances BuildException in unknown circumstances

makeRemoteDir

protected void makeRemoteDir(FTPClient ftp, String dir)
Create the specified directory on the remote host.

Parameters: ftp The FTP client connection dir The directory to create (format must be correct for host type)

Throws: IOException in unknown circumstances BuildException if ignoreNoncriticalErrors has not been set to true and a directory could not be created, for instance because it was already existing. Precisely, the codes 521, 550 and 553 will trigger a BuildException

resolveFile

protected String resolveFile(String file)
Correct a file path to correspond to the remote host requirements. This implementation currently assumes that the remote end can handle Unix-style paths with forward-slash separators. This can be overridden with the separator task parameter. No attempt is made to determine what syntax is appropriate for the remote host.

Parameters: file the remote file name to be resolved

Returns: the filename as it will appear on the server.

rmDir

protected void rmDir(FTPClient ftp, String dirname)
Delete a directory, if empty, from the remote host.

Parameters: ftp ftp client dirname directory to delete

Throws: IOException in unknown circumstances BuildException if skipFailedTransfers is set to false and the deletion could not be done

sendFile

protected void sendFile(FTPClient ftp, String dir, String filename)
Sends a single file to the remote host. filename may contain a relative path specification. When this is the case, sendFile will attempt to create any necessary parent directories before sending the file. The file will then be sent using the entire relative path spec - no attempt is made to change directories. It is anticipated that this may eventually cause problems with some FTP servers, but it simplifies the coding.

Parameters: ftp ftp client dir base directory of the file to be sent (local) filename relative path of the file to be send locally relative to dir remotely relative to the remotedir attribute

Throws: IOException in unknown circumstances BuildException in unknown circumstances

setAccount

public void setAccount(String pAccount)
Sets the login account to use on the specified server.

Parameters: pAccount the account name on remote system

Since: Ant 1.7

setAction

public void setAction(String action)

Deprecated: since 1.5.x. setAction(String) is deprecated and is replaced with setAction(FTP.Action) to make Ant's Introspection mechanism do the work and also to encapsulate operations on the type in its own class.

Sets the FTP action to be taken. Currently accepts "put", "get", "del", "mkdir", "chmod", "list", and "site".

Parameters: action the FTP action to be performed.

Throws: BuildException if the action is not a valid action.

UNKNOWN: ignore="true"

setAction

public void setAction(FTP.Action action)
Sets the FTP action to be taken. Currently accepts "put", "get", "del", "mkdir", "chmod", "list", and "site".

Parameters: action the FTP action to be performed.

Throws: BuildException if the action is not a valid action.

setBinary

public void setBinary(boolean binary)
If true, uses binary mode, otherwise text mode (default is binary).

Parameters: binary if true use binary mode in transfers.

setChmod

public void setChmod(String theMode)
Sets the file permission mode (Unix only) for files sent to the server.

Parameters: theMode unix style file mode for the files sent to the remote system.

setDefaultDateFormatConfig

public void setDefaultDateFormatConfig(String defaultDateFormat)
Sets the defaultDateFormatConfig attribute.

Parameters: defaultDateFormat configuration to be set, unless it is null or empty string, in which case ignored.

See Also: org.apache.commons.net.ftp.FTPClientConfig

setDepends

public void setDepends(boolean depends)
Set to true to transmit only files that are new or changed from their remote counterparts. The default is to transmit all files.

Parameters: depends if true only transfer newer files.

setIgnoreNoncriticalErrors

public void setIgnoreNoncriticalErrors(boolean ignoreNoncriticalErrors)
set the flag to skip errors on directory creation. (and maybe later other server specific errors)

Parameters: ignoreNoncriticalErrors true if non-critical errors should not cause a failure.

setInitialSiteCommand

public void setInitialSiteCommand(String initialCommand)
Sets the initialSiteCommand attribute. This attribute names a site command that will be executed immediately after connection.

Parameters: initialCommand The initialSiteCommand to set.

setListing

public void setListing(File listing)
The output file for the "list" action. This attribute is ignored for any other actions.

Parameters: listing file in which to store the listing.

setNewer

public void setNewer(boolean newer)
A synonym for depends. Set to true to transmit only new or changed files. See the related attributes timediffmillis and timediffauto.

Parameters: newer if true only transfer newer files.

setPassive

public void setPassive(boolean passive)
Specifies whether to use passive mode. Set to true if you are behind a firewall and cannot connect without it. Passive mode is disabled by default.

Parameters: passive true is passive mode should be used.

setPassword

public void setPassword(String password)
Sets the login password for the given user id.

Parameters: password the password on the remote system.

setPort

public void setPort(int port)
Sets the FTP port used by the remote server.

Parameters: port the port on which the remote server is listening.

setPreserveLastModified

public void setPreserveLastModified(boolean preserveLastModified)
Set to true to preserve modification times for "gotten" files.

Parameters: preserveLastModified if true preserver modification times.

setRecentDateFormatConfig

public void setRecentDateFormatConfig(String recentDateFormat)
Sets the recentDateFormatConfig attribute.

Parameters: recentDateFormat configuration to be set, unless it is null or empty string, in which case ignored.

See Also: org.apache.commons.net.ftp.FTPClientConfig

setRemotedir

public void setRemotedir(String dir)
Sets the remote directory where files will be placed. This may be a relative or absolute path, and must be in the path syntax expected by the remote server. No correction of path syntax will be performed.

Parameters: dir the remote directory name.

setRetriesAllowed

public void setRetriesAllowed(String retriesAllowed)
Defines how many times to retry executing FTP command before giving up. Default is 0 - try once and if failure then give up.

Parameters: retriesAllowed number of retries to allow. -1 means keep trying forever. "forever" may also be specified as a synonym for -1.

setSeparator

public void setSeparator(String separator)
Sets the remote file separator character. This normally defaults to the Unix standard forward slash, but can be manually overridden using this call if the remote server requires some other separator. Only the first character of the string is used.

Parameters: separator the file separator on the remote system.

setServer

public void setServer(String server)
Sets the FTP server to send files to.

Parameters: server the remote server name.

setServerLanguageCodeConfig

public void setServerLanguageCodeConfig(FTP.LanguageCode serverLanguageCode)
Sets the serverLanguageCode attribute.

Parameters: serverLanguageCode configuration to be set, unless it is null or empty string, in which case ignored.

See Also: org.apache.commons.net.ftp.FTPClientConfig

setServerTimeZoneConfig

public void setServerTimeZoneConfig(String serverTimeZoneId)
Sets the serverTimeZoneConfig attribute.

Parameters: serverTimeZoneId configuration to be set, unless it is null or empty string, in which case ignored.

See Also: org.apache.commons.net.ftp.FTPClientConfig

setShortMonthNamesConfig

public void setShortMonthNamesConfig(String shortMonthNames)
Sets the shortMonthNamesConfig attribute

Parameters: shortMonthNames configuration to be set, unless it is null or empty string, in which case ignored.

See Also: org.apache.commons.net.ftp.FTPClientConfig

setSiteCommand

public void setSiteCommand(String siteCommand)
Sets the siteCommand attribute. This attribute names the command that will be executed if the action is "site".

Parameters: siteCommand The siteCommand to set.

setSkipFailedTransfers

public void setSkipFailedTransfers(boolean skipFailedTransfers)
If true, enables unsuccessful file put, delete and get operations to be skipped with a warning and the remainder of the files still transferred.

Parameters: skipFailedTransfers true if failures in transfers are ignored.

setSystemTypeKey

public void setSystemTypeKey(FTP.FTPSystemType systemKey)
Sets the systemTypeKey attribute. Method for setting FTPClientConfig remote system key.

Parameters: systemKey the key to be set - BUT if blank the default value of null (which signifies "autodetect") will be kept.

See Also: org.apache.commons.net.ftp.FTPClientConfig

setTimeDiffAuto

public void setTimeDiffAuto(boolean timeDiffAuto)
"true" to find out automatically the time difference between local and remote machine. This requires right to create and delete a temporary file in the remote directory.

Parameters: timeDiffAuto true = find automatically the time diff

Since: ant 1.6

setTimeDiffMillis

public void setTimeDiffMillis(long timeDiffMillis)
number of milliseconds to add to the time on the remote machine to get the time on the local machine. use in conjunction with newer

Parameters: timeDiffMillis number of milliseconds

Since: ant 1.6

setTimestampGranularity

public void setTimestampGranularity(FTP.Granularity timestampGranularity)
Sets the timestampGranularity attribute

Parameters: timestampGranularity The timestampGranularity to set.

setUmask

public void setUmask(String theUmask)
Sets the default mask for file creation on a unix server.

Parameters: theUmask unix style umask for files created on the remote server.

setUserid

public void setUserid(String userid)
Sets the login user id to use on the specified server.

Parameters: userid remote system userid.

setVerbose

public void setVerbose(boolean verbose)
Set to true to receive notification about each file as it is transferred.

Parameters: verbose true if verbose notifications are required.

transferFiles

protected int transferFiles(FTPClient ftp, FileSet fs)
For each file in the fileset, do the appropriate action: send, get, delete, or list.

Parameters: ftp the FTPClient instance used to perform FTP actions fs the fileset on which the actions are performed.

Returns: the number of files to be transferred.

Throws: IOException if there is a problem reading a file BuildException if there is a problem in the configuration.

transferFiles

protected void transferFiles(FTPClient ftp)
Sends all files specified by the configured filesets to the remote server.

Parameters: ftp the FTPClient instance used to perform FTP actions

Throws: IOException if there is a problem reading a file BuildException if there is a problem in the configuration.