Pages Navigation Menu

Coding is much easier than you think

SFTP Using Java (VFS jar)

Posted by on Mar 25, 2013 in SFTP, SFTP Tutorial | 2 comments

 
Download and add the below library in your class path.

 


 
Using the below java code we can perform the following operation in a SFTP server
1. Upload a file intO Remote server using SFTP
2. Download a file from Remote server using SFTP
3. Delete a file in remote system using sftp
4. Rename a file in remote system using SFTP
 
** UPDATE: FTP Complete tutorial now available here.
 

import java.io.File;

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemException;
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 SftpExample {

	public static void main(String[] args) {
		String hostName = "localhost";
		String username = "admin";
		String password = "admin";
		String localFilePath = "C:/text.txt";
		String remoteFilePath = "/test/text.txt";

		upload(hostName, username, password, localFilePath, remoteFilePath);
		exist(hostName, username, password, remoteFilePath);
		download(hostName, username, password, localFilePath, remoteFilePath);
		delete(hostName, username, password, remoteFilePath);
	}
        // Method to upload a file in Remote server
	public static void upload(String hostName, String username,
			String password, String localFilePath, String remoteFilePath) {

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

		StandardFileSystemManager manager = new StandardFileSystemManager();

		try {
			manager.init();

			// Create local file object
			FileObject localFile = manager.resolveFile(file.getAbsolutePath());

			// Create remote file object
			FileObject remoteFile = manager.resolveFile(
					createConnectionString(hostName, username, password,
						remoteFilePath), createDefaultOptions());

			// Copy local file to sftp server
			remoteFile.copyFrom(localFile, Selectors.SELECT_SELF);

			System.out.println("File upload success");
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			manager.close();
		}
	}
        // Download file function:
	public static void download(String hostName, String username,
			String password, String localFilePath, String remoteFilePath) {

		StandardFileSystemManager manager = new StandardFileSystemManager();

		try {
			manager.init();

			String downloadFilePath = localFilePath.substring(0,
			localFilePath.lastIndexOf("."))
			+ "_downlaod_from_sftp"
			+ localFilePath.substring(localFilePath.lastIndexOf("."),
			localFilePath.length());

			// Create local file object
			FileObject localFile = manager.resolveFile(downloadFilePath);

			// Create remote file object
			FileObject remoteFile = manager.resolveFile(
					createConnectionString(hostName, username, password,
						remoteFilePath), createDefaultOptions());

			// Copy local file to sftp server
			localFile.copyFrom(remoteFile, Selectors.SELECT_SELF);

			System.out.println("File download success");
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			manager.close();
		}
	}
        // Delete file in remote system:
	public static void delete(String hostName, String username,
			String password, String remoteFilePath) {
		StandardFileSystemManager manager = new StandardFileSystemManager();

		try {
			manager.init();

			// Create remote object
			FileObject remoteFile = manager.resolveFile(
					createConnectionString(hostName, username, password,
						remoteFilePath), createDefaultOptions());

			if (remoteFile.exists()) {
				remoteFile.delete();
				System.out.println("Delete remote file success");
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			manager.close();
		}
	}
        // Check remote file is exist function:
	public static boolean exist(String hostName, String username,
			String password, String remoteFilePath) {
		StandardFileSystemManager manager = new StandardFileSystemManager();

		try {
			manager.init();

			// Create remote object
			FileObject remoteFile = manager.resolveFile(
					createConnectionString(hostName, username, password,
						remoteFilePath), createDefaultOptions());

			System.out.println("File exist: " + remoteFile.exists());

			return remoteFile.exists();
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally {
			manager.close();
		}
	}
        // Establishing connection
	public static String createConnectionString(String hostName,
	String username, String password, String remoteFilePath) {
	return "sftp://" + username + ":" + password + "@" + hostName + "/" + remoteFilePath;
	}
        //  Method to setup default SFTP config:
	public static FileSystemOptions createDefaultOptions()
			throws FileSystemException {
		// Create SFTP options
		FileSystemOptions opts = new FileSystemOptions();

		// SSH Key checking
		SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(
				opts, "no");

		// Root directory set to user home
		SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts, true);

		// Timeout is count by Milliseconds
		SftpFileSystemConfigBuilder.getInstance().setTimeout(opts, 10000);

		return opts;
	}

}
Read More