SFTP in Java Sample Working Program

(Last Updated On: November 29, 2013)

SFTP File Upload in Java:
FTP can be done with Apache Commons and commons-logging jar. If you want to do SFTP you need the below jars,

Required Jars:

1. commons-logging-1.1.1.jar
2. commons-vfs2-2.0 (or) commons-vfs-1.0 (try vfs2.0 jar first, if any unexpected exception then try with vfs1.0.jar)
3. jsch-0.1.50 (First check without this jar, if any unexpected exceptions then add this jar also and try) 

SFTP File Upload Program:

import java.io.File;

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemOptions;
import org.apache.commons.vfs2.Selectors;
import org.apache.commons.vfs2.impl.StandardFileSystemManager;
import org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder;

public class SFTPUpload {
	public static void main(String[] args) {
		SFTPUpload sendMyFiles = new SFTPUpload();
		sendMyFiles.fileUpload();
	}

	public boolean fileUpload() {
		System.out.println("SFTP Upload Process Begins");
		StandardFileSystemManager manager = new StandardFileSystemManager();
		try {
			String serverAddress = "SERVER_HOST_OR_IP_ADDRESS";
			String userName = "USERNAME";
			String password = "PASSWORD";
			String dstnDirectory = "DESTINATION_PATH";
			String srcDirectory = "SOURCE_PATH";
			String fileToUpload = "javadomain.txt";

			String filepath = srcDirectory + fileToUpload;
			File file = new File(filepath);

			if (!file.exists())
				throw new RuntimeException("Error. Local file not found");

			manager.init();
			FileSystemOptions opts = new FileSystemOptions();
			SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(
					opts, "no");

			// Below line create the Destination path inside destination path
			// and transfer the javadomain.txt file
			// SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts,true);

			// Below line transfer the javadomain.txt file to destination path

			SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts,
					false);
			SftpFileSystemConfigBuilder.getInstance().setTimeout(opts, 10000);

			String sftpUri = "sftp://" + userName + ":" + password + "@"
					+ serverAddress + "/" + dstnDirectory + fileToUpload;			                  System.out.println("SFTP URI: " + sftpUri);

			FileObject localFile = manager.resolveFile(file.getAbsolutePath());
			System.out.println("Source Path: " + localFile);

			FileObject remoteFile = manager.resolveFile(sftpUri, opts);
			System.out.println("Destination Path: " + remoteFile);

			remoteFile.copyFrom(localFile, Selectors.SELECT_SELF);
			System.out.println("SFTP Upload Done");
		} catch (Exception ex) {
			ex.printStackTrace();
			return false;
		} finally {
			manager.close();
		}
		return true;
	}

}

Destination Path Problem:

Eg:
Local_direcotry = /usr/Naveen/files
Remote_direcotry = /usr/javadomain/files

SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts,false);
False – It will take the given remote directory path as destination and transfer the files.
True – It will create the same path from the given destination path and then transfers the files.

Example:False – /usr/javadomain/files
True – /usr/javadomain/files/usr/javadomain/files and transfer/upload the files.

Recommended Books:

294 total views, 0 views today

Leave a Reply

Your email address will not be published. Required fields are marked *