/*
* Copyright 2012 jMethods, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.myjavaworld.ftp.examples;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import com.myjavaworld.ftp.ConnectionException;
import com.myjavaworld.ftp.ControlConnectionEvent;
import com.myjavaworld.ftp.ControlConnectionListener;
import com.myjavaworld.ftp.FTPClient;
import com.myjavaworld.ftp.FTPConnectionEvent;
import com.myjavaworld.ftp.FTPConnectionListener;
import com.myjavaworld.ftp.FTPException;
import com.myjavaworld.ftp.ListParser;
import com.myjavaworld.ftp.RemoteFile;
/**
* This example demonstrates how to connect to an FTP site and list the contents
* of a directory.
*
* @author Sai Pullabhotla, psai [at] jMethods [dot] com
* @version 1.0
*/
public class DirList {
/**
* A date format object format last modified date of remote files.
*/
private static final DateFormat dateFormat = DateFormat
.getDateTimeInstance();
/**
* @param args
* command line arguments.
* @throws InstantiationException
* propogated
* @throws ClassNotFoundException
* propogated
* @throws IllegalAccessException
* propogated
* @throws FTPException
* propogated
* @throws ConnectionException
* propogated
* @throws ParseException
* propogated
*/
public static void main(String[] args) throws InstantiationException,
ClassNotFoundException, IllegalAccessException, FTPException,
ParseException, ConnectionException {
// Determine the FTPClient implementation that you would like to use.
// For most FTP servers, the DefaultFTPClient should work. There is
// another implementation for working with AS/400 (iSeries) FTP servers.
// The class name for it is com.myjavaworld.ftp.AS400FTPClient.
// And, of course, you can always write your own implementation either
// by implementing the FTPClient interface or by extending one of the
// exsting implementations.
String ftpClientClassName = "com.myjavaworld.ftp.DefaultFTPClient";
// String ftpClientClassName = "com.myjavaworld.ftp.AS400FTPClient";
// Determine the directory list parser that we would like to use in this
// session. For most FTP servers, the default implementatiom should work
// fine. There is another implementation provided for handling
// MS-DOS directory list format. The class name is
// com.myjavaworld.ftp.DosListPareser. You can always write one of your
// own implementation if you want to work with an FTP server that uses a
// list format other than UNIX or DOS. This can be done implementing the
// com.myjavaworld.ftp.ListParser interface.
String listParserClassName = "com.myjavaworld.ftp.DefaultListParser";
// String listParserClassName = "com.myjavaworld.ftp.DosListParser";
// Use reflection to find the FTP Client class and obtain an instance
// of FTPClient.
FTPClient client = (FTPClient) Class.forName(ftpClientClassName)
.newInstance();
// Use reflection to find the list parser class and obtain an instance
// of the list parser.
ListParser parser = (ListParser) Class.forName(listParserClassName)
.newInstance();
// Set the list parser to use with this FTP client.
client.setListParser(parser);
// Listen for connection events. This is optional.
client.addFTPConnectionListener(new FTPConnectionListener() {
public void connectionOpened(FTPConnectionEvent evt) {
System.out.println(evt.getMessage());
}
public void connectionClosed(FTPConnectionEvent evt) {
System.out.println(evt.getMessage());
}
});
// Listen for various commands that are sent to the server and the
// replies received. This is optional.
client.addControlConnectionListener(new ControlConnectionListener() {
public void commandSent(ControlConnectionEvent evt) {
System.out.println(evt.getMessage());
}
public void replyReceived(ControlConnectionEvent evt) {
System.out.println(evt.getMessage());
}
});
client.setPassive(true);
// Set proxy
// client.setProxy(new Proxy(Type.SOCKS, new InetSocketAddress(
// "localhost", 1080)));
// Connect to the FTP server.
client.connect("ftp.netscape.com");
// Login to the FTP server.
client.login("anonymous", "you@yourcompany.com");
// Findout the current working directory on the FTP server.
RemoteFile workingDirectory = client.getWorkingDirectory();
// print the dir listing.
list(client);
// Change the working directory to a different directory. Make sure that
// this dir exists on the FTP server.
client.setWorkingDirectory(parser.createRemoteFile(workingDirectory,
"pub", true));
// Print the dir list of the new working directory.
list(client);
// Close the connection.
client.disconnect();
}
private static void list(FTPClient client) throws FTPException,
ParseException, ConnectionException {
RemoteFile[] children = client.list();
// For each file in the list, print out the attributes, whether the file
// is a directory or a regular file, the size of the file, the date and
// the name of the file.
for (int i = 0; i < children.length; i++) {
System.out
.println(children[i].getAttributes()
+ "\t"
+ (children[i].isDirectory() ? "<DIR>" : "<FILE>")
+ "\t"
+ children[i].getSize()
+ "\t"
+ dateFormat.format(new Date(children[i]
.getLastModified())) + "\t"
+ children[i].getName());
}
}
}