Java之通过Jsch库连接Linux实现文件传输

Java之通过JSch库连接Linux实现文件传输

文章目录

  • Java之通过JSch库连接Linux实现文件传输
  • 1. JSch
  • 2. Java通过Jsch连接Linux
    • 1. poxm.xml
    • 2. 工具类
    • 3. 调用案例

1. JSch

官网:JSch - Java Secure Channel (jcraft.com)

JSch是SSH2的纯Java实现。
JSch 允许您连接到 sshd 服务器并使用端口 转发、X11 转发、文件传输等,以及 您可以将其功能集成到您自己的 Java 程序中。 JSch在BSD风格的许可证下获得许可。

2. Java通过Jsch连接Linux

1. poxm.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.yuan</groupId><artifactId>yuan-connect-linux</artifactId><version>1.0.0</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency></dependencies>
</project>

2. 工具类

SftpUtils.java如下:

package com.yuan.utils;import com.jcraft.jsch.*;
import org.apache.commons.lang3.StringUtils;import java.io.*;
import java.util.*;
import java.util.logging.Logger;//在使用的的时候,需要调用 connect()开启连接,使用完后调用 disconnect() 关闭连接 。
public class SftpUtils {Logger log = Logger.getLogger(SftpUtils.class.getName());/*** 主机名称/IP*/private String host;/*** 端口,默认22*/private int port = 22;/*** 用户名*/private String userName;/*** 密码*/private String password;private ChannelSftp sftp = null;private Channel channel = null;private Session session = null;public SftpUtils(String host, String userName, String password) {this.host = host;this.userName = userName;this.password = password;}public SftpUtils(String host, int port, String userName, String password) {this.host = host;this.port = port;this.userName = userName;this.password = password;}/*** 连接到服务器** @throws JSchException*/public void connect() throws JSchException {JSch jSch = new JSch();session = jSch.getSession(userName, host, port);session.setPassword(password);session.setConfig(this.config());session.connect();channel = session.openChannel("sftp");channel.connect();sftp = (ChannelSftp) channel;log.info("以连接到主机" + host);}/*** config** @return Properties*/private Properties config() {Properties properties = new Properties();properties.put("StrictHostKeyChecking", "no");return properties;}/*** 关闭连接*/public void closeConnect() {try {if (sftp.isConnected()) {sftp.disconnect();}if (channel.isConnected()) {channel.disconnect();}if (session.isConnected()) {session.disconnect();}} catch (Throwable e) {e.printStackTrace();}}/*** 下载文件** @param remoteDir      远程服务器文件目录,不指定路径默认是FTP的根路径,指定路径是指的SFTP的根路径下开始。*                       例如:SFTP根路径为:/sftp/file,那么默认下载文件会去根路径下载,而指定 sftpPath 也是从根路径下开始;*                       指定 sftpPath 为 word,那么是从 /sftp/file/word 路径中查找文件下载。为空表示忽略该参数。* @param fileName       文件名,如:myTest.pdf* @param outputFilePath 下载文件保存路径,目录+文件名,例如:d:/pdf/myTest.pdf* @return*/public boolean downloadFile(String remoteDir, String fileName, String outputFilePath) {OutputStream outputStream = null;try {if (StringUtils.isNotBlank(remoteDir)) {sftp.cd(remoteDir);}outputStream = new FileOutputStream(outputFilePath);sftp.get(fileName, outputStream);return true;} catch (Exception e) {log.info("下载文件错误," + e.getMessage());} finally {if (outputStream != null) {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}return false;}/*** 文件上传** @param remotePath    远程服务器目录,不指定路径默认是FTP的根目录,指定路径是指的SFTP的根目录下开始。*                      例如:SFTP根路径为:/opt/file,那么默认下载文件会去根路径下载,而指定 sftpPath 也是从根路径下开始;*                      指定 sftpPath 为 word,那么是从 /sftp/file/word 路径中查找文件下载。为空表示忽略该参数。* @param fileName      上传后文件名* @param localFilePath 本地文件路径,目录+文件名,例如:d:/aa/myTest.pdf* @return*/public boolean uploadFile(String remotePath, String fileName, String localFilePath) {InputStream inputStream = null;try {if (StringUtils.isNotBlank(remotePath)) {sftp.cd(remotePath);}inputStream = new FileInputStream(localFilePath);sftp.put(inputStream, fileName);return true;} catch (Exception e) {log.info("文件上传失败:" + e.getMessage());} finally {if (null != inputStream) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}return false;}/*** 上传文件** @param remotePath  远程服务器目录,不指定路径默认是FTP的根目录,指定路径是指的SFTP的根目录下开始。*                    例如:SFTP根路径为:/sftp/file,那么默认下载文件会去根路径下载,而指定 sftpPath 也是从根路径下开始;*                    指定 sftpPath 为 word,那么是从 /sftp/file/word 路径中查找文件下载。为空表示忽略该参数。* @param fileName    上传后文件名* @param inputStream 文件输入流* @return*/public boolean uploadFile(String remotePath, String fileName, InputStream inputStream) {try {if (StringUtils.isNotBlank(remotePath)) {sftp.cd(remotePath);}sftp.put(inputStream, fileName);return true;} catch (Exception e) {log.info("文件上传失败:" + e.getMessage());} finally {if (null != inputStream) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}return false;}/*** 文件删除** @param remotePath 远程服务器目录,不指定路径默认是FTP的根目录,指定路径是指的SFTP的根目录下开始。*                   例如:SFTP根路径为:/sftp/file,那么默认下载文件会去根路径下载,而指定 sftpPath 也是从根路径下开始;*                   指定 sftpPath 为 word,那么是从 /sftp/file/word 路径中查找文件下载。为空表示忽略该参数。* @param fileName   文件名* @return*/public boolean deleteFile(String remotePath, String fileName) {try {if (StringUtils.isNotBlank(remotePath)) {sftp.cd(remotePath);}sftp.rm(fileName);return true;} catch (Exception e) {log.info("删除文件失败:" + e.getMessage());}return false;}/*** 查询指定目录下所有文件** @param remotePath 远程服务器目录,不指定路径默认是FTP的根目录,指定路径是指的SFTP的根目录下开始。*                   例如:SFTP根路径为:/sftp/file,那么默认下载文件会去根路径下载,而指定 sftpPath 也是从根路径下开始;*                   指定 sftpPath 为 word,那么是从 /sftp/file/word 路径中查找文件下载。为空表示忽略该参数。* @return*/public List<String> listFiles(String remotePath) throws SftpException {Vector files = sftp.ls(remotePath);List<String> result = new ArrayList<>();Iterator iterator = files.iterator();while (iterator.hasNext()) {ChannelSftp.LsEntry isEntity = (ChannelSftp.LsEntry) iterator.next();result.add(isEntity.getFilename());}return result;}
}

3. 调用案例

package com.yuan;import com.yuan.utils.SftpUtils;public class SftpDemo {public static void main(String[] args) {SftpUtils sftpUtils = null;try {sftpUtils = new SftpUtils("??", 22, "??", "??");sftpUtils.connect();sftpUtils.downloadFile("/opt/download/", "myTest.pdf", "D:\\aa\\pdf\\yuan.pdf");} catch (Exception e) {e.printStackTrace();} finally {if (sftpUtils != null) {sftpUtils.closeConnect();}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqlserver exists存在

在 SQL Server 中&#xff0c;EXISTS 是一个用于检查子查询是否返回结果的关键字。它用于在条件中检查子查询的结果&#xff0c;如果子查询返回结果集&#xff0c;EXISTS 将返回 TRUE&#xff0c;否则返回 FALSE。这在编写复杂的查询时非常有用&#xff0c;可以帮助我们根据条件…

心律守护 基于机器学习的心脏病预测

心律守护 基于机器学习的心脏病预测 心律守护 基于机器学习的心脏病预测项目背景与意义项目数据与特征数据分析与预处理机器学习模型建立与评估结语 心律守护 基于机器学习的心脏病预测 在当今数字化时代&#xff0c;机器学习的应用已经渗透到了医疗保健领域的各个层面。其中&…

什么是PAGA系统

PAGA系统是一种公共广播和通用报警系统&#xff0c;它在船舶、海上钻井平台、石油化工、天然气开采等行业的应用非常广泛。当遇到紧急情况或其他特殊情况时&#xff0c;PAGA系统能够在大范围内进行喊话广播或报警。这种系统通过自动电话系统&#xff08;如PABX&#xff0c;即自…

【Python--网络编程之Ping命令的实现】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python开发技术 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; Python网络编程之Ping命令的实现 往期内容代码见资源&#xff0c;效果图如下一、实验要求二、协…

巴伦周刊:全球最赚钱对冲基金的成功秘诀是什么?

对冲基金界的明星们过去常常大起大落&#xff0c;有时甚至会实现大满贯式的全面成功&#xff0c;比如约翰•保尔森(John Paulson)在2007-09年金融危机前做空美国房地产市场赚了200亿美元。 但摇摆不定的对冲基金近年来并不是大赢家&#xff0c;相反最好的回报来自于多策略、多…

配置Vite+React+TS项目

初始化 执行npm create vite并填写项目名、用那个框架。。 配置 路径别名 在vite.config.ts里面配置&#xff1a; import { defineConfig } from vite import react from vitejs/plugin-react import path from pathexport default defineConfig({plugins: [react()],reso…

深度学习系列53:大模型微调概述

参考系列文章&#xff1a;https://zhuanlan.zhihu.com/p/635152813 github链接&#xff1a;https://github.com/liguodongiot/llm-action 1 训练范式 下面这种instructive learning&#xff0c;在模型参数达到80亿后&#xff0c;会发生质的提升&#xff1a; 类似的还有手写pr…

C#面:简述 CTS , CLS , CLR , IL

CTS通用类型系统(Commom Type System): 它定义了在.NET平台上所有类型的规范和行为。CTS确保了不同语言编写的代码可以相互交互操作,并且可以在运行时进行类型安全的检查。 CTS主要包括以下几个方面: 数据类型:CTS定义了一组基本数据类型,如整数、浮点数、布尔值等,以…

mysql查询分析explain

EXPLAIN&#xff1a;使用EXPLAIN| DESCRIBE查看语句具体执行计划&#xff0c;并不真正执行语句&#xff08;在估计大致数据量时可以使用explain&#xff09; type&#xff1a;针对单表的访问方法 system&#xff1a;当表中只有一条记录&#xff0c;并且该表使用的存储引擎统计…

鸿蒙开发系列教程(二十三)--List 列表操作(2)

列表样式 1、设置内容间距 在列表项之间添加间距&#xff0c;可以使用space参数&#xff0c;主轴方向 List({ space: 10 }) { … } 2、添加分隔线 分隔线用来将界面元素隔开&#xff0c;使单个元素更加容易识别。 startMargin和endMargin属性分别用于设置分隔线距离列表侧…

2024HVV | 12款开源渗透测试工具(非常详细)零基础入门到精通,收藏这一篇就够了

回顾过去&#xff0c;黑客入侵异常困难&#xff0c;需要大量手动操作。然而&#xff0c;如今&#xff0c;一套自动化测试工具让渗透测试人员变身“半机械人”&#xff0c;能够比以往任何时候都更轻松地完成更多测试。以下12款开源渗透测试工具&#xff0c;可以帮助渗透测试人员…

微信小程序: 获取accessToken,手机号, 小程序二维码,openId与unionId 公共配置类(核心篇)

全文目录,一步到位 1.前言简介1.1 专栏传送门 2. 微信小程序公用功能2.1 配置准备工作2.1.1 配置文件准备(单体放yml中 微服务放配置中心)2.1.2 获取配置文件中的小程序配置2.1.3 设置redis配置 2.2 创建不同功能工具类2.2.1 创建微信服务工具类WechatServiceUtils2.2.2 创建Re…

Java 基于 SpringBoot+Vue 的酒店管理系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

每日五道java面试题之java基础篇(十)

目录: 第一题 JVM有哪些垃圾回收器&#xff1f;第二题 垃圾回收分为哪些阶段&#xff1f;第三题 线程的⽣命周期&#xff1f;线程有⼏种状态&#xff1f;第四题.ThreadLocal的底层原理第五题.并发、并⾏、串⾏之间的区别 第一题 JVM有哪些垃圾回收器&#xff1f; ● 新⽣代收集…

RTDETR改进系列指南

基于Ultralytics的RT-DETR改进项目.(89.9) 为了感谢各位对RTDETR项目的支持,本项目的赠品是yolov5-PAGCP通道剪枝算法.具体使用教程 自带的一些文件说明 train.py 训练模型的脚本main_profile.py 输出模型和模型每一层的参数,计算量的脚本(rtdetr-l和rtdetr-x因为thop库的问…

YOLOv8制作自定义数据集并训练

YOLOv8制作自定义数据集并训练 前言一、制作自定义数据集1、建立相应文件夹2、下载图片3、为图片打标签&#xff08;1&#xff09;安装labelimg&#xff08;2&#xff09;打开labelimg&#xff08;3&#xff09;标记图片 二、按比例移动自定义数据集中的内容三、建立数据集测试…

考虑分库分表的时机与问题

考虑分库分表的时机与问题 什么时候考虑分库分表&#xff1f; 在以下情况下&#xff0c;考虑分库分表可能是一个不错的选择&#xff1a; 数据量大&#xff1a;单一数据库已经无法满足数据存储和查询的需求&#xff0c;数据量巨大导致性能下降。并发量高&#xff1a;单一数据…

vue3-生产部署-性能优化

生产部署 开发环境 vs. 生产环境 在开发过程中&#xff0c;Vue 提供了许多功能来提升开发体验&#xff1a; 对常见错误和隐患的警告 对组件 props / 自定义事件的校验 响应性调试钩子 开发工具集成 然而&#xff0c;这些功能在生产环境中并不会被使用&#xff0c;一些警…

2024年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题是由安全生产模拟考试一点通提供&#xff0c;危险化学品经营单位主要负责人证模拟考试题库是根据危险化学品经营单位主…

Unity3D 游戏开发中如何判断几何形状的位置关系详解

前言 在Unity3D游戏开发中&#xff0c;经常需要判断不同几何形状之间的位置关系&#xff0c;以便进行碰撞检测、物体运动和触发事件等操作。本文将详细介绍几种常见的几何形状位置关系判断方法&#xff0c;并给出相应的技术详解和代码实现。 对惹&#xff0c;这里有一个游戏开…