While working with a FTP server using Apache Commons Net API, it’s important to keep in mind that many operations are working based on the working directory (or current directory), such as create directories, upload files, download files, … Remember this rule:

The FTPClient class provides the following method to change working directory: 

boolean changeWorkingDirectory(String pathname) 

where pathname represents path of the directory to change, which can be either absolute or relative. For example, the following statement: 

changeWorkingDirectory(“/upload”) 

will change the current working directory to the upload directory under server’s root directory, regardless of what previous working directory is.

But this statement: 

changeWorkingDirectory(“upload”) 

will change the current working directory to the upload directory relative to the previous working directory.

And you should check return value of the method, which is true if the server changed the directory successfully, and false otherwise.

The following example program logins to a FTP server, changes working directory to “upload” and logs out. Full source code:

package net.codejava.ftp;

import java.io.IOException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

/**
 * This program demonstrates how to change current working directory
 * from a FTP client program using Apache Commons Net API.
 * @author www.codejava.net
 */
public class FTPChangeDirDemo {

	public static void main(String[] args) {
		String server = "www.yourserver.com";
		int port = 21;
		String user = "username";
		String pass = "password";

		FTPClient ftpClient = new FTPClient();

		try {

			ftpClient.connect(server, port);
			showServerReply(ftpClient);

			int replyCode = ftpClient.getReplyCode();
			if (!FTPReply.isPositiveCompletion(replyCode)) {
				System.out.println("Connect failed");
				return;
			}

			boolean success = ftpClient.login(user, pass);
			showServerReply(ftpClient);

			if (!success) {
				System.out.println("Could not login to the server");
				return;
			}

			// Changes working directory
			success = ftpClient.changeWorkingDirectory("/upload");
			showServerReply(ftpClient);

			if (success) {
				System.out.println("Successfully changed working directory.");
			} else {
				System.out.println("Failed to change working directory. See server's reply.");
			}

			// logs out
			ftpClient.logout();
			ftpClient.disconnect();

		} catch (IOException ex) {
			System.out.println("Oops! Something wrong happened");
			ex.printStackTrace();
		}
	}

	private static void showServerReply(FTPClient ftpClient) {
		String[] replies = ftpClient.getReplyStrings();
		if (replies != null && replies.length > 0) {
			for (String aReply : replies) {
				System.out.println("SERVER: " + aReply);
			}
		}
	}
}
Compile and run the program:



compile and run FTP change dir program

If operation succeeded, the server replies a message:

250 OK. Current directory is /upload

In case the directory does not exist, this message is responded:

550 Can't change directory to /upload: No such file or directory

cannot change dir

The FTPClient class also has another useful method to change to parent directory of the working directory: changeToParentDirectory()

 

Related Java FTP Tutorials:

 

Other Java FTP Tutorials:


About the Author:

is certified Java programmer (SCJP and SCWCD). He started programming with Java in the time of Java 1.4 and has been falling in love with Java since then. Make friend with him on Facebook and watch his Java videos you YouTube.



Attachments:
Download this file (FTPChangeDirDemo.java)FTPChangeDirDemo.java[Demo program]1 kB