`
keren
  • 浏览: 1560572 次
  • 性别: 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上传下载

    写了一个java操作sftp的工具类,里面有上传、下载、批量操作、远程创建目录、删除文件等等方法。里面的方法,都经过我测试,可用。。

    java操作sftp的工具类(JSch)

    java 实现 sftp 文件上传下载 等操作。

    java实现sftp操作工具类

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

    JavaSFTP上传文件

    Java 操作SFTP上传文件下载案例,很值得看的,Java 操作SFTP上传文件下载案例,很值得看的。

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

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

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

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

    详解Java使用Jsch与sftp服务器实现ssh免密登录

    主要介绍了详解Java使用Jsch与sftp服务器实现ssh免密登录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    SftpServer.zip(纯JAVASFTP服务可深度定制)

    基于开源APACHE MINA SSHD类库,实现SFTP服务,关闭SSH服务,支持通过配置XML文件指定用户名、密码或密钥登录,摆脱SFTP服务必须使用操作系统...项目使用JAVA(JRE1.8+),亦可参考本项目进行深度SFTP服务定制开发。

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

    NULL 博文链接:https://wenhai.iteye.com/blog/768666

    java的ftp和Sftp上传

    java的ftp和Sftp上传,简单的基本操作,分开两个类!!!

    java实现sftp的上传下载

    已经包含了一个叫作SFTP(Secure File TransferProtocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个...

    JAVA实现SFTP实例.txt

    资源内容:Java实现Sftp中文件的操作,如目录或文件创建及删除,拉取文件,上传文件。可以直接拿来使用。

    java common FTPClient ftp sftp

    ②快速知道如何使用java操作ftp文件,避免踩坑,多种操作方式。③ftp文件到底可如何操作。如何获取,如何上传。 阅读建议:此资源以让工作中的同学快速学习使用,直接复制代码即可直接使用,不需要太多改造,当然也...

    Java使用SFTP上传文件到服务器的简单使用

    主要介绍了Java使用SFTP上传文件到服务器的简单使用,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    Sftp操作工具类(java)&amp;jar包

    内含jar包和java实现代码 工具类含以下功能 1 得到当前工作目录地址 2 改变目录为配置的远程目录 3 取文件目录列表 4 取文件列表 5 下载文件 6 复制文件 7 删除文件 8 目录是否存在 文件是否存在 9 移动文件

    java程序实现文件夹删除

    Java 实现文件夹及文件夹下的文件删除。

    java源码包---java 源码 大量 实例

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包4

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

Global site tag (gtag.js) - Google Analytics