`
keren
  • 浏览: 1578901 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 操作sftp

阅读更多
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Vector;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.ChannelSftp.LsEntry;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.SftpATTRS;

public final class MySFTP {
	static String _root = "/";
	static com.jcraft.jsch.Session _sshSession;

	public static ChannelSftp connect(String host, String userName,
			String password, int port, String root) throws Exception {
		ChannelSftp sftp = null;
		try {
			JSch jsch = new JSch();
			_sshSession = jsch.getSession(userName, host, port);
			// System.out.println("Session created.");
			_sshSession.setPassword(password);
			Properties sshConfig = new Properties();
			sshConfig.put("StrictHostKeyChecking", "no");
			_sshSession.setConfig(sshConfig);
			_sshSession.connect();
			System.out.println("Session connected.");
			System.out.println("Opening Channel.");
			Channel channel = _sshSession.openChannel("sftp");
			channel.connect();
			sftp = (ChannelSftp) channel;
			System.out.println("Connected to " + host + ".");
			System.out.println("链接到SFTP成功》》》++++++" + host);
			sftp.cd(root);
			_root += root;
			return sftp;
		} catch (Exception e) {
			throw e;
		}
	}

	public static void disconnect(ChannelSftp sftp) {
		if (sftp != null) {
			if (sftp.isConnected()) {
				sftp.disconnect();
				System.out.println("sftp关闭连接!!!!!====" + sftp);
			} else if (sftp.isClosed()) {
			}
		}
		if (_sshSession != null && _sshSession.isConnected()) {
			_sshSession.disconnect();
		}
		System.out.println("sftp 已经关闭");
	}

	public boolean isConnected(ChannelSftp sftp) {
		return (sftp != null) && sftp.isConnected() && !sftp.isClosed()
				&& (_sshSession != null) && _sshSession.isConnected();
	}

	private static Vector _list(String dir, ChannelSftp sftp) {
		try {
			return sftp.ls(dir);
		} catch (Exception e) {
			return null;
		}
	}

	private static Vector _list(ChannelSftp sftp) {
		try {
			return sftp.ls(sftp.pwd());
		} catch (Exception e) {
			return null;
		}
	}

	public static List list(String dir, ChannelSftp sftp) {
		try {
			Vector ls = _list(dir, sftp);
			return _buildFiles(ls);
		} catch (Exception e) {
			return null;
		}
	}

	private static List _buildFiles(Vector ls) throws Exception {
		if (ls != null && ls.size() >= 0) {
			List list = new ArrayList();
			for (int i = 0; i < ls.size(); i++) {
				LsEntry f = (LsEntry) ls.get(i);
				String nm = f.getFilename();
				if (nm.equals(".") || nm.equals(".."))
					continue;
				SftpATTRS attr = f.getAttrs();
				Map m = new HashMap();
				if (attr.isDir()) {
					m.put("dir", new Boolean(true));
				} else {
					m.put("dir", new Boolean(false));
				}
				m.put("name", nm);
				list.add(m);
			}
			return list;
		}
		return null;
	}

	public static List list(ChannelSftp sftp) {
		try {
			Vector ls = _list(sftp);
			return _buildFiles(ls);
		} catch (Exception e) {
			return null;
		}
	}

	public static boolean cd(String dirs, ChannelSftp sftp) throws Exception {
		try {
			String path = dirs;
			if (path.indexOf("\\") != -1) {
				path = dirs.replaceAll("\\", "/");
			}
			String pwd = sftp.pwd();
			if (pwd.equals(path))
				return true;

			sftp.cd(_root);
			
			if(_root.equals(dirs))return true;
			
			String[] paths = path.split("/");
			for (int i = 0; i < paths.length; i++) {
				String dir = paths[i];
				if(isEmpty(dir))continue;
				sftp.cd(dir);
			}
			return true;
		} catch (Exception e) {
			throw e;
		}
	}

	public static boolean isExist(String root, String fileOrDir,
			ChannelSftp sftp) throws Exception {
		try {
			boolean exist = false;
			boolean cdflg = false;
			String pwd = sftp.pwd();
			if (pwd.indexOf(root) == -1) {
				cdflg = true;
				sftp.cd(root);
			}
			Vector ls = _list(root, sftp);
			if (ls == null || ls.size() <= 0) {
				for (int i = 0; i < ls.size(); i++) {
					LsEntry f = (LsEntry) ls.get(i);
					String nm = f.getFilename();
					if (nm.equals(fileOrDir)) {
						exist = true;
						break;
					}
				}
			}
			if (cdflg) {
				sftp.cd("..");
			}
			return exist;
		} catch (Exception e) {
			throw e;
		}
	}

	public static boolean isEmpty(String s) {
		return s == null || "".equals(s.trim());
	}

	public static boolean upload(String uploadFile, ChannelSftp sftp)
			throws Exception {
		java.io.InputStream is = null;
		try {
			File file = new File(uploadFile);
			is = new FileInputStream(file);
			sftp.put(is, file.getName());
			return true;
		} catch (Exception e) {
			throw e;
		}finally{
			try {
				if(is!=null){
					is.close();
					is=null;
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}

	public static void download(String dir, String downloadFile,
			String saveFile, ChannelSftp sftp) {
		try {
			boolean isCd = false;
			if (!isEmpty(dir)) {
				sftp.cd(dir);
				isCd = true;
			}
			// File file = new File(saveFile);
			// sftp.get(downloadFile, new FileOutputStream(file));
			sftp.get(downloadFile, saveFile);

			if (isCd)
				sftp.cd("..");

			System.out.println("下载文件成功!!!!!====" + sftp);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("下载文件失败!!!!!=*******" + sftp);
		}
	}

	public static boolean mkDir(String filepath, ChannelSftp sftp)
			throws Exception {
		try {
			String path = filepath;
			if (path.indexOf("\\") != -1) {
				path = filepath.replaceAll("\\", "/");
			}
			String[] paths = path.split("/");
			for (int i = 0; i < paths.length; i++) {
				String dir = paths[i];
				Vector ls = _list(dir, sftp);
				if (ls == null || ls.size() <= 0) {
					sftp.mkdir(dir);
				}
				sftp.cd(dir);
			}
		} catch (Exception e1) {
			throw e1;
		}
		return true;
	}

	public static boolean rm(String deleteFile, ChannelSftp sftp)
			throws Exception {
		try {
			Vector ls = _list(sftp);
			if (ls != null && ls.size() > 0) {
				for (int i = 0; i < ls.size(); i++) {
					LsEntry f = (LsEntry) ls.get(i);
					String nm = f.getFilename();
					if (!nm.equals(deleteFile)) {
						continue;
					}
					SftpATTRS attr = f.getAttrs();
					if (attr.isDir()) {
						if (rmdir(nm, sftp)) {
							sftp.rmdir(nm);
						}
					} else {
						sftp.rm(nm);
					}
				}
			}
			return true;
		} catch (Exception e) {
			throw e;
		}
	}

	private static boolean rmdir(String dir, ChannelSftp sftp) throws Exception {
		try {
			sftp.cd(dir);
			Vector ls = _list(sftp);
			if (ls != null && ls.size() > 0) {
				for (int i = 0; i < ls.size(); i++) {
					LsEntry f = (LsEntry) ls.get(i);
					String nm = f.getFilename();
					if (nm.equals(".") || nm.equals(".."))
						continue;
					SftpATTRS attr = f.getAttrs();
					if (attr.isDir()) {
						if (rmdir(nm, sftp)) {
							sftp.rmdir(nm);
						}
					} else {
						sftp.rm(nm);
					}
				}
			}
			sftp.cd("..");
			return true;
		} catch (Exception e) {
			throw e;
		}
	}
}




import java.util.List;
import java.util.Map;

import com.jcraft.jsch.ChannelSftp;

public class TestMySFTP {
	public static void main(String[] args) throws Exception {
		String userName = "ftpuser"; // FTP 登录用户名
		String password = "123"; // FTP 登录密码
		String host = "192.168.0.147"; // FTP 服务器地址IP地址
		int port = 22; // FTP 端口
		String root = "gzfw";
		TestMySFTP app = new TestMySFTP();
		ChannelSftp sftp = MySFTP.connect(host, userName, password, port, root);
		
		//app.upload(sftp);

		//app.removeFile(sftp);
		
		app.download(sftp);
		MySFTP.disconnect(sftp);
	}
	
	void upload(ChannelSftp sftp){
		try {
			String dir = "a/b/c";
			boolean flg = MySFTP.mkDir(dir, sftp);
			if(flg){
				String pwd = sftp.pwd();
				System.out.println(pwd);
				System.out.println(sftp.getHome());
				System.out.println(sftp.lpwd());
				//sftp.cd(".");
				//sftp.cd("..");
				String uploadFile = "d:/sql.txt";
				MySFTP.upload(uploadFile, sftp);//上传
				System.out.println("上传-成功.");
			}
//			dir = "a";
//			flg = MySFTP.cd(dir, sftp);
//			if(flg){
//				String uploadFile = "d:/dwsgsDelDup12.sql";
//				MySFTP.upload(uploadFile, sftp);//上传
//				System.out.println("上传-成功.");
//			}
		} catch (Exception e) {
			System.out.println("--上传失败..");
			e.printStackTrace();
		}
	}
	void removeFile(ChannelSftp sftp){
		try {
			String dirs = "a/b";
			boolean flg = MySFTP.cd(dirs, sftp);
			if(flg){
				String deleteFile = "c";
				MySFTP.rm(deleteFile, sftp);
				System.out.println("删除-成功.");
			}
		} catch (Exception e) {
			System.out.println("--删除失败..");
			e.printStackTrace();
		}
	}
	
	void download(ChannelSftp sftp){
		try {
			boolean flg = MySFTP.cd("/gzfw", sftp);
			if(flg){
				List files = MySFTP.list(sftp);
				if(files!=null&&files.size()>0){
					for(int i=0;i<files.size();i++){
						Map item = (Map)files.get(i);
						String f = (String)item.get("name");
						boolean isDir = ((Boolean)item.get("dir")).booleanValue();
						System.out.println("---本目录---"+f+" 是:"+isDir);
						if(isDir){
							List subfiles = MySFTP.list(f,sftp);
							for(int j=0;j<subfiles.size();j++){
								Map item1 = (Map)subfiles.get(j);
								boolean isDir1 = ((Boolean)item1.get("dir")).booleanValue();
								if(isDir1)continue;
								String ff = (String)item1.get("name");
								System.out.println("---2----"+ff);
								MySFTP.download(f,ff, "e:/ftp/"+ff, sftp);
							}
						}
						MySFTP.rm(f, sftp);
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
分享到:
评论

相关推荐

    java操作sftp的工具类(JSch)

    Java操作SFTP(Secure File Transfer Protocol)主要依赖于第三方库,如JSch。JSch是一个纯Java实现的SSH2库,允许开发人员连接到支持SFTP的服务器,进行文件的上传、下载以及执行其他相关操作。本文将详细介绍如何...

    java实现sftp操作工具类

    1分让你得到sftp常用操作工具,工具实现如下操作: 1)得到当前工作目录地址 2)改变目录为配置的远程目录 3)取文件目录列表 4)取文件列表 5)下载文件 6)复制文件 7)删除文件 8)目录是否存在,文件是否存在 9)移动文件 ...

    java操作sftp上传下载

    以上就是使用Java和JSch库操作SFTP的基本步骤,你可以根据实际需求扩展这个`SFTPTool`类,例如增加异常处理、超时设置、文件重命名等功能。在实际应用中,记得根据你的SFTP服务器配置调整连接参数,并确保安全性,...

    JavaSFTP上传文件

    在Java编程中,SFTP(Secure File ...综上所述,Java操作SFTP上传和下载文件主要涉及到JSch库的使用,包括连接配置、通道创建、文件操作以及断开连接等步骤。在实际开发中,应结合具体需求,优化代码并确保安全性。

    JAVA SFTP文件上传、下载及批量下载实例

    JAVA SFTP文件上传、下载及批量下载实例 在本篇文章中,我们将详细介绍JAVA SFTP文件上传、下载及批量下载的实例,包括相关的概念、API介绍、代码实现等方面的内容。 首先,我们需要了解什么是SFTP?SFTP(Secure ...

    java代码sftp和ftp上传下载文件

    本文将深入探讨如何使用Java实现SFTP(Secure File Transfer Protocol)和FTP(File Transfer Protocol)进行文件的上传与下载,以满足在Linux服务器上的操作需求。 首先,FTP是一种用于在网络之间传输文件的标准...

    JAVA实现SFTP上传,下载,删除等方法

    在Java编程中,实现Secure File Transfer Protocol (SFTP) 功能是常见的需求,尤其是在处理远程文件操作时。本文将详细讲解如何使用开源库JSch来实现在Java中进行SFTP的上传、下载以及删除文件的方法。 JSch是一个...

    java 开发sftp下载上传

    本篇文章将深入探讨如何使用Java进行SFTP的文件上传与下载操作。 首先,为了在Java中实现SFTP,我们需要一个支持SFTP的库,例如JSch(Java Secure Channel)。JSch是一个开源的Java库,它实现了SSH2协议,包括SFTP...

    java实现sftp上传下载文件

    本文将详细探讨如何使用Java实现SFTP的文件上传和下载功能,以及如何利用jcraft库来完成这一任务。 首先,jcraft是一个日本开发者团队创建的开源项目,提供了Java实现的SSH2库,其中包括对SFTP的支持。在本示例中,...

    java实现sftp文件夹上传

    在Java编程环境中,SFTP(Secure File Transfer Protocol)是一种安全的文件传输协议,常用于在本地计算机和远程服务器之间交换文件。Swing是Java提供的一个用于构建桌面应用程序的图形用户界面(GUI)工具包。本篇...

    java使用sftp操作样例 包含jar和代码

    Java使用SFTP(Secure File Transfer Protocol)进行文件操作是一种常见的任务,特别是在远程服务器间安全传输文件时。SFTP是SSH(Secure Shell)协议的一部分,提供了一种加密的网络通信方式,确保了数据在传输过程...

    java版SFTP实现示例(使用jsch)

    JSch是一个纯Java实现的SSH2库,它允许Java应用程序连接到支持SSH协议的服务器,执行SFTP操作。`jsch-0.1.43.jar`是JSch库的JAR文件,包含所有必要的类和方法来处理SSH连接和SFTP会话。 首先,我们需要在项目中引入...

    java通过sftp模式实现FTP的文件上传下载删除功能

    在Java编程中,SFTP(Secure File Transfer Protocol)是一种安全的文件传输协议,它基于SSH(Secure Shell)来提供服务,常用于在不同系统间安全地传输文件。本篇文章将详细探讨如何使用Java通过SFTP模式实现FTP的...

    JSch - Java实现的SFTP(文件上传详解篇)

    JSch - Java 实现的 SFTP(文件上传详解篇) JSch 是 Java Secure Channel 的缩写,JSch 是一个 SSH2 的纯 Java 实现。JSch 允许您连接到一个 SSH 服务器,并且可以使用端口转发、X11 转发、文件传输等,当然您也...

    java实现sftp客户端上传文件以及文件夹的功能

    `Ftp.java`可能是一个封装了SFTP操作的类,`properties.properties`是配置文件,包含SFTP连接的相关参数。`打包运行jar文件.txt`可能是关于如何构建和运行项目成可执行JAR的说明。 实现上述功能时,还需要注意异常...

    java SFTP上传所需jar和秘钥工具

    1. **JSch (Java Secure Channel)**: JSch 是一个纯Java实现的SSH2库,它允许用户执行SFTP(Secure File Transfer Protocol)操作。SFTP是基于SSH协议的文件传输协议,提供了安全的文件传输能力。JSch-0.1.54.jar是...

    基于Java的实例源码-用Java写的SFTP代码.zip

    本实例源码是基于Java实现的SFTP客户端,用于连接到支持SFTP的服务器并执行文件操作,如上传、下载和管理文件。 Java作为一种广泛使用的编程语言,拥有丰富的库和工具支持各种网络通信,包括SFTP。在Java中实现SFTP...

    sftp上传下载 java

    首先,为了在Java中使用SFTP,我们需要一个支持SFTP的库,例如JSch(Java Secure Channel)。JSch是一个开源的Java库,提供了SSH2协议的实现,包括SFTP服务。在描述中提到的“jar包”可能就是JSch的库文件。要使用...

    jeasonchan#Blog#Java:sftp和ftp的client端文件操作1

    1背景参考文章:Java使用SFTP和FTP两种连接方式实现对服务器的上传下载java使用JSCH连接FTP(Linux服务器)上传文件到Linux服务器Jav

    用java写的SFTP代码源码下载

    在IT行业中,SFTP(Secure File...通过阅读和理解源码,你可以更好地了解Java中如何处理SFTP连接和文件操作。请确保在实际使用时遵循最佳实践,例如使用安全的SSH密钥对,避免明文存储密码,并处理可能出现的异常情况。

Global site tag (gtag.js) - Google Analytics