通過sftp操作Linux服務器上的文件(java)


本文為實現對linux服務器文件的操作。windows服務器不支持。

引入jar包:jsch-0.1.42.jar
package com.csvreader.sftp;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Properties;
import java.util.Vector;

import org.junit.Test;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

public class SftpUtil {
	/**
	 * 
	 * @param host
	 * @param port
	 * @param username
	 * @param password
	 * @return
	 * @throws JSchException
	 */
	public ChannelSftp connect(String host, int port, String username,String password) throws JSchException {
		// 1.聲明連接Sftp的通道
		ChannelSftp nChannelSftp = null;
		// 2.實例化JSch
		JSch nJSch = new JSch();
		// 3.獲取session
		Session nSShSession = nJSch.getSession(username, host, port);
		System.out.println("Session創建成功");
		// 4.設置密碼
		nSShSession.setPassword(password);
		// 5.實例化Properties
		Properties nSSHConfig = new Properties();
		// 6.設置配置信息
		nSSHConfig.put("StrictHostKeyChecking", "no");
		// 7.session中設置配置信息
		nSShSession.setConfig(nSSHConfig);
		// 8.session連接
		nSShSession.connect();
		System.out.println("Session已連接");
		// 9.打開sftp通道
		Channel channel = nSShSession.openChannel("sftp");
		// 10.開始連接
		channel.connect();
		nChannelSftp = (ChannelSftp) channel;
		System.out.println("連接到主機" + host + ".");
		return nChannelSftp;
	}

	/**
	 * 文件重命名
	 * @param directory
	 * @param oldname
	 * @param newname
	 * @param sftp
	 */
	public void renameFile(String directory, String oldname, String newname,ChannelSftp sftp) {
		try {
			sftp.cd(directory);
			sftp.rename(oldname, newname);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 上傳文件
	 * @param directory
	 * @param uploadFile
	 * @param sftp
	 */
	public void upload(String directory, String uploadFile, ChannelSftp sftp) {
		try {
			sftp.cd(directory);
			File file = new File(uploadFile);
			sftp.put(new FileInputStream(file), file.getName());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 下載文件
	 * @param directory
	 * @param downloadFile
	 * @param saveFile
	 * @param sftp
	 */
	public void download(String directory, String downloadFile,String saveFile, ChannelSftp sftp) {
		try {
			sftp.cd(directory);
			File file = new File(saveFile);
			sftp.get(downloadFile, new FileOutputStream(file));

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 刪除文件
	 * @param directory
	 * @param deleteFile
	 * @param sftp
	 */
	public void delete(String directory, String deleteFile, ChannelSftp sftp) {
		try {
			sftp.cd(directory);
			sftp.rm(deleteFile);
			System.out.println("刪除成功");
		} catch (Exception e) {
			System.out.println("刪除失敗");
			e.printStackTrace();
		}
	}

	/**
	 * 列出列表下的文件
	 * @param directory
	 * @param sftp
	 * @return
	 * @throws SftpException
	 */
	public Vector listFiles(String directory, ChannelSftp sftp)throws SftpException {
		return sftp.ls(directory);
	}

	/**
	 * 下載文件夾下面的所有文件
	 * 
	 * @param viDirectory 文件夾
	 * @param viHost 主機名
	 * @param viPort 端口號
	 * @param viUserName 用戶名
	 * @param viPassWord 用戶密碼
	 * @param viSaveDir 保存路徑
	 * @return
	 */
	@Test
	public List<String> downloadDirFile(String viDirectory, String viHost,int viPort, String viUserName, String viPassWord, String viSaveDir) {
		ChannelSftp nChannelSftp = null;
		List<String> nFileNameList = null;
		try {
			// 1.實例化nSftpUtil工具類
			SftpUtil nSftpUtil = new SftpUtil();
			// 2.建立Sftp通道
			nChannelSftp = nSftpUtil.connect(viHost, 22, viUserName, viPassWord);
			// 3.獲取目錄下面所有文件
			Vector nVector = nChannelSftp.ls(viDirectory);
			// 4.循環遍歷文件
			for (int i = 0; i < nVector.size(); i++) {
				// 5.進入服務器文件夾
				nChannelSftp.cd(viDirectory);
				// 6.實例化文件對象
				String nFileName = nVector.get(i).toString().substring(56, nVector.get(i).toString().length());
				if (!nFileName.contains("csv")) {
					continue;
				}
				File nFile = new File(viSaveDir + File.separator + nFileName);
				// 7.下載文件
				nChannelSftp.get(nFileName, new FileOutputStream(nFile));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			nChannelSftp.disconnect();
		}
		return nFileNameList;
	}


附件附jar包


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM