edtFTPj/Free - Open-source FTP library for Java | Download

edtFTPj/Free revision history

Version Description
Version 2.5.0
(6 July 2016)
  • Changed transfers so that connection and handshake in passive mode is done after sending the command and prior to reading the reply. We found a server that requires this.
  • DeleteOnFailure now set to false by default.
  • Fixed bug in FTPInputStream.
  • Make reading of FTP replies more robust (copes better with nonsense).
  • MVSFileParser fixes.
  • Fix NullReferenceException in FTP passive mode.
  • Now uses the default OS settings for SO_SNDBUF and SO_RCVBUF unless explicitly set by setNetworkBufferSize().
  • Fix bug with setDisableChModAfterCreateDir().
  • Fix to dir list - ignore socket creation exception if empty directory.
Version 2.4.0
(24 December 2012)
  • Improved performance of binary input streams. Implement skip(), mark() and reset() for FTPInputStream.
  • Catch tryLock() exceptions and ignore them. Add flag to avoid using tryLock().
  • Added resumeNextDownload(long) to FTPClient so that partial downloads can be done.
Version 2.3.0
(26 August 2011)
  • Added support for using ACCT in FileTransferClient.
  • FTPFile.getPath() should not include the filename, only the directory, for all protocols. This includes FTPFile objects returned from dirDetails() and fileDetails().
  • Fixed bug in MLST parser.
  • If MLST not supported fileDetails() now falls back to SIZE and MDTM.
  • Return an empty array of features if FEAT returns no features (but is implemented by the server). Tweak array so only actual features are returned.
Version 2.2.2
(7 February 2011)
  • Fixed bug re reading multi-line replies.
Version 2.2.1
(17 January 2011)
  • Fixed resume bug(introduced in 2.2.0).
  • Trim spaces in front of FTP reply codes.
  • Added OS/400 directory listing parser.
Version 2.2.0
(4 January 2011)
  • Permit 232 code to be returned from USER command.
  • Add ability to abort listings when using a callback.
  • Added RollingFileAppender.
  • Added a system property to add a prefix to all edtFTPj loggers (for use with log4j).
  • Tweaks to UnixFileParser for some unusual formats.
  • Ensure that "." and ".." don't appear in listings that use wildcards.
Version 2.1.0
(28 April 2010)
  • Add callback allowing each entry returned from dirDetails and listDirectory to be processed one by one, without creating a list of all entries. Useful for very large listings where memory could be a problem.
  • Fixed resume download bug where if resume() is called twice, firstly on an existing file, and then when there is no local file, the second download also resumes.
  • Mask argument to ACCT in logging.
Version 2.0.5
(19 October 2009)
  • Fix end of line terminator bug in FTPInputStream. If Unix EOL terminators were read, they were stripped, which is incorrect.
  • Made exists() method more reliable for FTP/FTPS.
  • Note - now supports Java 1.4 and above.
  • Fixed problem whereby FTP server errors such as 452 are accepted in non-strict reply checking mode.
  • Add ability to intercept and modify the server response to the PASV command (so that a different host or port number can be substituted).
  • Now throws FTPTransferCancelledException when uploads are cancelled.
  • Minor file parsing bug fixes.
Version 2.0.4
(13 February 2009)
  • Fix bug where control socket isn't closed if connect succeeds but initial commands fail.
  • Refactored directory listing parsing. Fix for Korean months in UnixFileParser.
  • FTPException.toString() now includes the reply code if it exists.
  • Add FTPFile.isFile().
  • Fix bug in FTPInputStream.read().
  • Fix bug in Logger where edtftp.log.level property is not set correctly.
  • Print out CodeSource in logging.
  • For resuming uploads, now send SIZE prior to establishing data socket.
  • Implement automatic retry for FTP transfers.
  • Fixed problem where server replies had embedded \r chars. This meant it was wrongly thought that the reply was complete, when in fact more was to come (resulting in out of order replies further along).
Version 2.0.3
(6 June 2008)
  • Fixed bug where any strings added to the FileNotFoundStrings, DirectoryEmptyStrings and TransferCompleteStrings instances obtained via getAdvancedFTPSettings().setFileNotFoundMessages() etc were not applied.
  • In active mode, now cycles through available ports if socket creation fails for a transfer.
  • "Unexpected null reply" error message changed to a more informative message.
Version 2.0.2
(31 March 2008)
  • Added FTPConnectionClosedException, thrown when a 421 reply is received.
Version 2.0.1
(9 January 2008)
  • Fixed bug where the last modified date was always null for the Windows parser.
  • executeCommand() now returns the entire server string, including any FTP reply codes.
  • Fix documentation error re directory listings.
Version 2.0.0
(20 December 2007)
  • Major enhancements. Release of FileTransferClient, a new, easy-to-use interface that includes the functionality of FTPClient but adds FTP streams.
  • New updated Developers Guide, together with extensive new examples.
  • Add setListenOnAllInterfaces(boolean) flag to stop active mode listening on all interfaces (all interfaces is the default).
Version 1.5.6
(15 October, 2007)
  • In dirDetails() now English is always tried first for date parsing locale, followed by the default locale. Other locales can also be specified. Also, date parsing exceptions are no longer propagated - the relevant field is now set to null.
  • Ignore FTPException from size() if resume is being tried for an upload (which occurs if the file does not exist).
  • Fix in parsing code for Connect:Enterprise UNIX.
  • Added accessors for message fragment collections used in parsing server messages for FTP/S.
Version 1.5.5
(30 May, 2007)
  • Source now has version numbers embedded, so ant is not required to build the jar and insert the version numbers. Tidied up the distribution.
  • Improved connected() method for JRE 1.4+.
  • Fix ASCII mode bugs whereby some line terminators are incorrectly handled.
  • ASCII mode can now read Unix or Windows text files on any platform.
  • Change dirDetails() to cope with SYST unsupported.
  • Download operations append the remote filename to the local path if the local path is a directory.
  • Fixed autodetect transfer mode bug where actual mode was not being changed on the FTP server.
  • FTPTransferCancelledException now thrown for transfers if the transfer is cancelled.
  • Added getVMSParser() to FTPFileFactory, permitting the VMSParser to be directly configured (and added is/setVersionInName() and get/setBlockSize() to VMSFileParser). Directory names returned now have ".DIR" trimmed off them.
Version 1.5.4
(16 January, 2007)
  • Added support for STOU, i.e. all put() methods now permit a null parameter for the remote filename - the FTP server generates a unique name that is returned.
  • Timeout value now applies during initial connection to a remote host, so connection attempts won't hang if a timeout is set. Only works for JRE 1.4+.
  • Control character encoding now used when reading directory listings.
  • Added exists() method to FTPClientInterface and FTPClient.
  • Fixed bug in handling FTP error messages when data connection has been terminated.
  • Don't null out FileFactory when quit() is called.
  • Added support for MLST via fileDetails().
Version 1.5.3
(28 July, 2006)
  • Fixed bug in handling FTP error messages when data connection has been terminated
  • More flexibility in interpreting PASV response string
  • Autodetection of ASCII/binary added as an option
  • Now accepts 230 reply for initial connection (returned by some proxy servers)
  • Fixed flush bug in StandardOutputAppender
  • Fixed timeout so it propagates correctly to active data sockets
  • Fixed VMS directory parsing bug
  • Writes more detailed versioning info to debug
  • Solves wu-ftpd directory listing problem with "No such file or directory" error for empty dirs
Version 1.5.2
(20 September, 2005)
  • Now accepts 213 reply for SYST
  • Added extra test for no files found string comparisions for OS/390
  • Changed cancel processing to not use abort()
  • Increased max fields in parsing
  • Tweaked reply processing to remove possibility of NullPointerException
  • Make restart() public
Version 1.5.1
(June 10, 2005)
  • Added noOperation() for preventing connections timing out
  • Tweaks to VMS file parsing
  • Added a connected() method
  • Extra error checking in control socket message handling
Version 1.5.0
(June 3, 2005)
  • Fixes so that ASCII transfers work as per the spec for binary files
  • VMS directory parsing
Version 1.4.9
(May 15, 2005)
  • Allow 350 response to STOR if strict checking is off
  • Added setActivePortRange to specify port numbers used in active transfers
  • Deprecated setPORTIP, renaming it to setActiveIPAddress
Version 1.4.8
(April 1, 2005)
  • Allow validation to be switched off in quote()
  • Tidied exception handling in dir()
  • Fixed problem where "Unexpected null reply received"
  • Fixed minor bug in UnixFileParser re symlinks
Version 1.4.7
(March 18, 2005)
  • Added cdup()
  • Deprecated all constructors other than default constructors - now use setters
Version 1.4.6
(February 4, 2005)
  • ACCT command support
  • Some minor exception restructuring
  • Writable check before download - if not writable, exception thrown
  • FTPFile now has a public constructor
  • ABOR command support
  • Level.getLevel() method made public so own config can be used to set levels
Version 1.4.5
(October 23, 2004)
  • Minor directory parsing fixes
  • Fixed SecurityExceptions when using in an applet
  • Added clearSOCKS() method to remove SOCKS property settings
  • Can now set the encoding of the control socket streams (default still US-ASCII)
  • Can now set the locale used for directory parsing
Version 1.4.4
(September 18, 2004)
  • Fixed UnixFileParser bug where timestamp was in future
  • Fixed UnixFileParser problem for listings without link counts
  • Modified so JRE 1.1.x is again supported (broken in 1.4.2)
Version 1.4.3
(August 31, 2004)
  • Added resume capabilities for upload/download of binary files (not ASCII)
  • Added features() command to interrogate server for its features via FEAT
  • Can set the size of buffers used for socket read/writes
Version 1.4.2
(July 23, 2004)
  • initGet()/initPut() NullPointerException fixed
  • Minor fixes for directory parsing - IIS FTP with Unix format listings - filesnames with multiple spaces
  • Can now set your own directory parser
  • Can now have strict or non-strict server return code checking
  • Progress Monitor now returns the total number of bytes transferred as last callback
Version 1.4.1
(June 25, 2004)
  • Tweaks for Java 1.1.x compatibility
  • Fixed logging bug re control of logging levels
  • Minor bug fix for directory parsing of files with many spaces in them
Version 1.4.0
(June 11, 2004)
  • A complete rewrite of logging. A log4j-like interface is now used, and log4j integration is supported. The FTPMessageListener interface allows all FTP commands to be intercepted separately to the logging system. Some constructors have been removed as the passing of streams for obtaining logging information is no longer supported
  • comprehensive Developer's Guide added
  • permit return code of 200 to be accepted for delete(),mkdir(),rmdir()
  • minor fix to UnixFileParser to cater for files with the same name as users
Version 1.3.2
(May 4, 2004)
  • cater for blanks in file and dir names re dirDetails() and WindowsFileParser
  • set date parsing locale to be US for dirDetails() parsers
Version 1.3.1
(May 1, 2004)
  • added demo directory with simple demo program
  • fixed bug re port not being passed in to constructor
  • cater for "total 334342" ('total' followed by size) being first line returned from LIST command in dirDetails()
Version 1.3.0
(April 19, 2004)
  • added dirDetails() which returns an array of FTPFile objects. FTPFile objects describe the details of each file file by parsing the returned listing - the file name, if it is a directory, the modification date and other system dependent fields. A number of new classes are included for parsing output in different formats
Version 1.2.4
(March 28, 2004)
  • minor fix re US-ASCII on control socket
  • fix re trailing non-digits on SIZE reply
  • made it easier to inherit from FTPClient
  • tweaks to put() methods to ensure streams are closed
Version 1.2.3
(November 3, 2003)
  • added progress monitor callback
  • added ability to cancel transfers
  • quote() now returns a string so the server reply can be more easily examined
  • added size() method so the size of a file can be obtained
  • fixed logging problem so it can be more easily controlled
  • modtime() now uses GMT as per the "Extensions to FTP" RFC
  • altered login() method to allow for no password
  • FTPControlSocket now uses US-ASCII charset
  • fixed bug in ASCII mode of extra CRLF at end of file
Version 1.2.2
(May 31, 2003)
  • removed unused imports (now using Eclipse IDE)
  • for binary transfers, write count of bytes transferred to log
  • mask password text in log (thanks to Trevor Pinkney)
  • can pass in a null logstream to prevent any logging at all
  • fix to cope with proFTPD returning 450 for empty dir (thanks to Robert Collins)
  • changed TestListing.java to cater for IIS returning 550 on non-existent directory
Version 1.2.1
(January 29, 2003)
  • minor fix to result of pwd()
  • minor additional check in FTPControlSocket.readReply()
  • added additional constructors in FTPClient so that a PrintWriter and a timeout can be supplied
  • fix to cope with wu-ftpd returning "550 No files found" when dir() is called on an empty directory
  • include junit.jar in the distribution to make building the library easier
  • added a timeout test
Version 1.2
(November 19, 2002)
  • put() now supports supplying an InputStream as a data source ∓ get() now supports supplying an OutputStream as a destination (thanks to John Benediktsson)
  • added modtime() to find the modification timestamp for a remote file (thanks to Fedor Karpelevitch)
  • created FTPReply class, and added method for retrieving latest reply from the server (getLastValidReply())
  • can now set a PrintWriter to which debug is written
  • made initSOCKS() static so it can be called before connecting
  • added initSOCKSAuthentication() so that the SOCKS username and password can be set if required
  • made all class imports explicit
  • quit() no longer sends two EOLs
  • logout() tries to close all streams before throwing any exceptions that are caught
  • in put(), if the local file isn't found, fails immediately and doesn't open a connection
  • pwd() now returns the current directory rather than a message containing it
  • timeout now set correctly when doing get() in active mode
  • when errors occur in getXXX(), the local file is now deleted (thanks to Brendan McKeown)
  • check for a null string in readReply() and throw IOException if it occurs
  • byte[] get() now returns an empty byte array if the remote file is of zero length, rather than 4096 bytes of junk
  • quit() now has a finally block that closes the control connection unconditionally to prevent unclosed resources if an error occurs
  • in PASV mode, allow for IBM mainframes that don't enclose the supplied IP address in brackets
  • improved performance of byte[] get() by using a ByteArrayOutputStream (thanks to Bill Bereza)
  • added help() command
  • in dir() (and list()) methods, renamed "mask" argument to "dirname" to more accurately describe the argument
  • all files in the tar file are now in a root directory of "ftp-1.x"
  • using ant-1.5.1 for builds (instead of ant-1.4)
  • now using JUnit for testing
Version 1.1 (October 12, 2001)
  • implemented active mode (thanks to Vladyslav Skarzhevsky)
  • minor bug fixes for FTP servers that send weird replies
  • fixed ASCII mode transmission so it works
  • deprecated list() and introduced dir(), which returns an array of strings rather than a single string
  • made ASCII the default transfer mode (preventing exceptions when using list/dir() without setting the mode)
  • introduced getReplyCode() into FTPException
  • added ability to set the socket timeout (control and data connections)
  • restructured code so that data input/output streams are only opened after the reply code indicates it is ok to proceed - stops hanging when a remote file doesn't exist
  • now using ant for building and packaging
Version 1.0 (February 26, 2001)
  • fixed hanging bug re latest wu-ftpd (used on Linux)
  • rename(), quote() methods added
  • put() now does appends
  • can now specify the control socket if desired
  • support for SOCKS proxy settings
October 4, 2000
  • Numerous fixes so that majority of legal return codes are dealt with
  • JDK 1.3
  • Added list() method (i.e. dir/ls functionality)
  • added debug sending of responses to standard out
January 10, 2000
  • Initial release. JDK 1.1.x.