Use Commons Net FTPClient to
communicate with an FTP server. The following example retrieves the
contents of the file c64bus.gif
from ftp.ibibilio.org:
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
FTPClient client = new FTPClient( );
OutputStream outStream = null;
try {
// Connect to the FTP server as anonymous
client.connect( "ftp.ibiblio.org" );
client.login( "anonymous", "" );
String remoteFile = "/pub/micro/commodore/schematics/computers/c64/
c64bus.gif";
// Write the contents of the remote file to a FileOutputStream
outStream = new FileOutputStream( "c64bus.gif" );
client.retrieveFile( remoteFile, outStream );
} catch(IOException ioe) {
System.out.println( "Error communicating with FTP server." );
} finally {
IOUtils.closeQuietly( outStream );
try {
client.disconnect( );
} catch (IOException e) {
System.out.println( "Problem disconnecting from FTP server" );
}
}In the previous example, an instance of FTPClient is created; the example then logs on
to ftp.ibibio.org as anonymous—with no password—using the connect( ) and login() method on FTPClient.
The full path to the remote file c64bus.gif and an OutputStream are passed to retrieveFile() , which then transfers the contents of the c64bus.gif to a local file. Once the file has
been retrieved, the FTPClient is
disconnected from the server using the disconnect( ) method in a finally
block.
FTPClient can also be used to
list the contents of a directory by passing a directory to the listFiles( ) method. The following example
uses FTPClient to print the name and
size of every file in the /pub/mirrors/apache/jakarta/ecs/binaries
directory on ftp.ibiblio.org:
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
FTPClient client = new FTPClient( );
// Connect to the FTP server as anonymous
client.connect( "ftp.ibiblio.org" );
client.login( "anonymous", "" );
String remoteDir = "/pub/mirrors/apache/jakarta/ecs/binaries";
// List the contents of the remote directory
FTPFile[] remoteFiles = client.listFiles( remoteDir );
System.out.println( "Files in " + remoteDir );
for (int i = 0; i < remoteFiles.length; i++) {
String name = remoteFiles[i].getName( );
long length = remoteFiles[i].getSize( );
String readableLength = FileUtils.byteCountToDisplaySize( length );
System.out.println( name + ":\t\t" + readableLength );
}
client.disconnect( );After connecting to ftp.ibiblio.org, this example retrieves an
array of FTPFile objects using
client.listFiles( ). Each FTPFile object contains information describing
the remote file, and the name and size of each FTPFile is printed to the console as
follows:
Files in /pub/mirrors/apache/jakarta/ecs/binaries README.html: 1 KB RELEASE_NOTES.txt: 2 KB ecs-1.4.2.tar.gz: 1 MB ecs-1.4.2.tar.gz.asc: 65 bytes ecs-1.4.2.tar.gz.md5: 33 bytes ecs-1.4.2.zip: 2 MB ecs-1.4.2.zip.asc: 65 bytes ecs-1.4.2.zip.md5: 33 bytes
Commons Net also contains a Trivial File Transfer Protocol (TFTP) client: org.apache.commons.net.tftp.TFTPClient. For
more information about TFTP client, see the Javadoc for TFTPClient at http://commons.apache.org/net/apidocs/org/apache/commons/net/tftp/TFTPClient.html.
FTPClient contains a number of
additional
features, such as active and passive connection modes and the ability to
append to remote files, make remote directories, and put files on a
remote FTP server. For more information about FTPClient, see the FTPClient Javadoc at http://commons.apache.org/net/apidocs/org/apache/commons/net/ftp/FTPClient.html.
