java scp传输文件

java scp传输文件<dependency><groupId>ch.ethz.ganymed</groupId><artifactId>ganymed-ssh2</artifactId><version>build210</version></dependency&a

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 <dependency>
     <groupId>ch.ethz.ganymed</groupId>  
    <artifactId>ganymed-ssh2</artifactId>  
    <version>build210</version>  
  </dependency>



import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.SCPClient;
import ch.ethz.ssh2.SFTPException;
import ch.ethz.ssh2.SFTPv3Client;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;


public class SCPUtil {

	 
	public static final String LOCALPATH = "";
	
	public static final String REMOTEFILEPATH = "";

	public static final String REMOTEIP = "";

	public static final String USERNAME = "";

	public static final String PASSWORD = "";

	/**
	 * 远程文件传输,如果local参数是文件,则本地传输到远程;如果是目录,则远程传输到本地
	 * 
	 * @param remoteIp
	 *            远程主机IP或hostname
	 * @param user
	 *            远程主机用户名
	 * @param password
	 *            远程主机对应密码
	 * @param local
	 *            本地主机文件名(本地->远程);本地主机目录名(远程->本地)
	 * @param remote
	 *            远程主机目录名(本地->远程);远程主机文件名(远程->本地)
	 * @return 返回true:成功。false:失败
	 */
	public static boolean scpFile(String remoteIp, String user,
			String password, String local, String remote) {
		Connection con = new Connection(remoteIp);
		try {
			con.connect();
			boolean isAuthed = con.authenticateWithPassword(user, password);

			if (!isAuthed) {
				//logger.error("远程主机" + remoteIp + "用户名或密码验证失败!");
				return false;
			}

			SCPClient scpClient = con.createSCPClient();
			File localFile = new File(local);
			if (localFile.isFile()) {
				if (!localFile.exists()) {
					//logger.error("本地文件" + local + "不存在,无法传输!");
					return false;
				} else {
					try {
						SFTPv3Client sftpClient = new SFTPv3Client(con);
						// 远程新建目录
						sftpClient.mkdir(remote, 0777);
					} catch (SFTPException e1) {
					//	logger.info("目录" + remote + "已存在,无需再创建。");
					}

					try {
						scpClient.put(local, remote, "0777");
					} catch (IOException e2) {
						//logger.error("路径" + remote + "不是一个文件夹。");
						return true;
					}

					// 上传到远程主机上的文件
					String filename = local
							.substring(local.lastIndexOf('/') + 1);
					Session session = con.openSession();
					session.execCommand("ls -l " + remote + "/" + filename);
					InputStream is = new StreamGobbler(session.getStdout());
					BufferedReader br = new BufferedReader(
							new InputStreamReader(is));
					String line = br.readLine();
					br.close();
					is.close();
					session.close();
					if (!StringUtils.isEmpty(line)) {
						return true;
					}
				}
			} else {
				if (!localFile.exists()) {
					localFile.mkdirs();
				}

				scpClient.get(remote, local);

				String filename = remote.substring(remote.lastIndexOf('/') + 1);
				if (new File(local + "/" + filename).exists()) {
					return true;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		con.close();
		return false;
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171994.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ubuntu 18.04 ros melodic_ubuntu查看软件版本

    ubuntu 18.04 ros melodic_ubuntu查看软件版本1.ROS版本选择ROS是一个用于编写机器人软件的灵活框架,它集成了大量的工具、库、协议,提供了类似操作系统所提供的功能,包括硬件抽象描述、底层驱动程序管理、公用功能的执行、程序间的消息传递、程序发行包管理,可以极大简化繁杂多样的机器人平台下的复杂任务创建与稳定行为控制。ROS和Ubuntu版本安装对应关系ROS版本Ubuntu版本indigo14.04kinetic16.04melodic18.04ROS的安装方法主要有两种:软件源安装和源码编译安

    2025年10月19日
    1
  • oracle 内置函数

    oracle 内置函数

    2022年2月24日
    45
  • 不要再走弯路了,最全的黑客入门学习路线在这[通俗易懂]

    不要再走弯路了,最全的黑客入门学习路线在这[通俗易懂]在大多数的思维里总觉得学习网络安全得先收集资料、学习编程、学习计算机基础,这样不是不可以,但是这样学效率太低了!你要知道网络安全是一门技术,任何技术的学习一定是以实践为主的。也就是说很多的理论知识其实是可以在实践中去验证拓展的,这样学习比起你啃原理、啃书本要好理解很多。所以想要学习网络安全选对正确的学习方法很重要,这可以帮你少走很多弯路。因为如果你选择了一个低效的方法,也许别人都已经彻底学会了,你还停留在入门阶段。对于小白来说,有个人引导会比自学要高效的多,尤其是容易坚持不下去的小伙伴。学姐

    2022年6月3日
    41
  • springboot启动后自动停止_redis启动停止重启

    springboot启动后自动停止_redis启动停止重启springboot项目启动后自动停止,也引入了jar包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>但是启动仍然自动停止,怎么搞?在启动类上增加捕获异常并打印日志publicstaticvoidmain(Strin

    2025年8月30日
    6
  • 关于浏览器报错:stack overflow at line: 0 的解决法

    关于浏览器报错:stack overflow at line: 0 的解决法本文主要是从程序猿的角度进行分析的,致力于提供解决问题的思路,而不是盲目的从网上百度关于页面错误:stackoverflowatline:0 很明白,就是堆栈的溢出!所以,导致的原因也很清楚,无非就是页面中出现了类似于递归式的无线循环而导致的,所以可能出现的原因就很明晰了:1.浏览器对图片,js等引用进入了无线循环这时候出错的原因,无非是图片路径不正确或者引用多个相同的js…

    2022年7月15日
    21
  • ubuntu如何杀死进程「建议收藏」

    ubuntu如何杀死进程「建议收藏」一、得到所有进程先用命令查询出所有进程ps-ef二、杀死进程我们使用ps-ef命令之后,就会得到一些列进程信息,有进程pid什么的,如果你要杀死莫个进程的话,直接使用命令killpid

    2022年9月21日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号