iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >在Java中使用SFTP传输文件
  • 809
分享到

在Java中使用SFTP传输文件

java服务器apache 2023-08-25 18:08:26 809人浏览 泡泡鱼
摘要

1. 概述 在本教程中,我们将讨论如何在Java中使用SFTP从远程服务器上传和下载文件。 我们将使用三个不同的库:JSch、SSHJ 和 Apache Commons VFS来实现。 2. 使用 jsch 首先,让我们看看如何使用JSch

1. 概述

在本教程中,我们将讨论如何在Java中使用SFTP从远程服务器上传和下载文件。

我们将使用三个不同的库:JSchSSHJApache Commons VFS来实现。

2. 使用 jsch

首先,让我们看看如何使用JSch库从远程服务器上传和下载文件。

2.1. Maven 配置

我们需要将 jsch 依赖添加到我们的 pom.xml 中:

    com.jcraft    jsch    0.1.55

jsch 的最新版本可以在 [Maven Central](https://search.maven.org/search?q=g:com.jcraft AND a:jsch) 上找到。

2.2. 设置 JSch

现在我们将设置 JSch。

JSch 使我们能够使用密码验证或公钥验证来访问远程服务器。 在此示例中,我们将使用密码验证

private ChannelSftp setupJsch() throws JSchException {    JSch jsch = new JSch();    jsch.setKnownHosts("/Users/john/.ssh/known_hosts");    Session jschSession = jsch.getSession(user_name, remote_Host);    jschSession.setPassword(pass_Word);    jschSession.connect();    return (ChannelSftp) jschSession.openChannel("sftp");}

在上面的示例中,remoteHost 代表远程服务器的名称或 IP 地址(即 example.com)。 我们可以将测试中使用的变量定义为:

private String remote_Host = "HOST_NAME_HERE";private String user_name = "USERNAME_HERE";private String pass_word = "PASSWORD_HERE";

我们还可以使用以下命令生成 known_hosts 文件:

ssh-keyscan -H -t rsa REMOTE_HOSTNAME >> known_hosts

2.3. 使用 JSch 上传文件

要将文件上传到远程服务器,我们将使用方法 ChannelSftp.put():

@Testpublic void whenUploadFileUsingJsch_thenSuccess() throws JSchException, SftpException {    ChannelSftp channelSftp = setupJsch();    channelSftp.connect();     String localFile = "src/main/resources/sample.txt";    String remoteDir = "remote_sftp_test/";     channelSftp.put(localFile, remoteDir + "jschFile.txt");     channelSftp.exit();}

在这个例子中,方法的第一个参数代表要传输的本地文件,src/main/resources/sample.txt,而*remoteDir*是远程服务器上目标目录的路径。

2.4. 使用 JSch 下载文件

我们还可以使用 ChannelSftp.get() 从远程服务器下载文件:

@Testpublic void whenDownloadFileUsingJsch_thenSuccess() throws JSchException, SftpException {    ChannelSftp channelSftp = setupJsch();    channelSftp.connect();     String remoteFile = "welcome.txt";    String localDir = "src/main/resources/";     channelSftp.get(remoteFile, localDir + "jschFile.txt");     channelSftp.exit();}

其中remoteFile是要下载的文件的路径,localDir代表目标本地目录的路径。

3. 使用 SSHJ

接下来,我们将使用 SSHJ 库从远程服务器上传和下载文件。

3.1. Maven 配置

首先,我们将依赖添加到我们的 pom.xml 中:

    com.hierynomus    sshj    0.27.0

最新的sshj版本可以在 [Maven Central](Https://search.maven.org/search?q=g:com.hierynomus AND a:sshj) 上找到。

3.2. 设置 SSHJ

然后我们设置 SSHClient.

SSHJ 还允许我们使用密码或公钥认证来访问远程服务器。

我们将在示例中使用密码验证:

private SSHClient setupSshj() throws IOException {    SSHClient client = new SSHClient();    client.addHosTKEyVerifier(new PromiscuousVerifier());    client.connect(remoteHost);    client.authPassword(username, password);    return client;}

3.3. 使用 SSHJ 上传文件

与 JSch 类似,我们将使用 SFTPClient.put() 方法将文件上传到远程服务器

@Testpublic void whenUploadFileUsingSshj_thenSuccess() throws IOException {    SSHClient sshClient = setupSshj();    SFTPClient sftpClient = sshClient.newSFTPClient();     sftpClient.put(localFile, remoteDir + "sshjFile.txt");     sftpClient.close();    sshClient.disconnect();}

我们在这里定义了两个新变量:

private String localFile = "src/main/resources/input.txt";private String remoteDir = "remote_sftp_test/";

3.4. 使用 SSHJ 下载文件

从远程服务器下载文件也是如此; 我们将使用 SFTPClient.get()

@Testpublic void whenDownloadFileUsingSshj_thenSuccess() throws IOException {    SSHClient sshClient = setupSshj();    SFTPClient sftpClient = sshClient.newSFTPClient();     sftpClient.get(remoteFile, localDir + "sshjFile.txt");     sftpClient.close();    sshClient.disconnect();}

我们将添加上面使用的两个变量:

private String remoteFile = "welcome.txt";private String localDir = "src/main/resources/";

4. 使用 Apache Commons VFS

最后,我们将使用 Apache Commons VFS 将文件传输到远程服务器。

实际上,Apache Commons VFS 内部使用 JSch 库

4.1. Maven 配置

我们需要将 commons-vfs2 依赖项添加到 pom.xml 中:

    org.apache.commons    commons-vfs2    2.4

最新版本的 commons-vfs2 可以在 [Maven Central](https://search.maven.org/search?q=g:org.apache.commons AND a:commons-vfs2) 上找到。

4.2. 使用 Apache Commons VFS 上传文件

Apache Commons VFS 有点不同。

我们将使用 FileSystemManager 从我们的目标文件创建 FileObjects,然后使用 FileObjects 传输我们的文件。

在本例中,我们将使用 FileObject.copyFrom() 方法上传文件:

@Testpublic void whenUploadFileUsingVfs_thenSuccess() throws IOException {    FileSystemManager manager = VFS.getManager();     FileObject local = manager.resolveFile(      System.getProperty("user.dir") + "/" + localFile);    FileObject remote = manager.resolveFile(      "sftp://" + username + ":" + password + "@" + remoteHost + "/" + remoteDir + "vfsFile.txt");     remote.copyFrom(local, Selectors.SELECT_SELF);     local.close();    remote.close();}

注意本地文件路径应该是绝对路径,远程文件路径应该以*sftp://username:password@remoteHost/*开头

4.3. 使用 Apache Commons VFS 下载文件

从远程服务器下载文件非常相似; 我们将使用 FileObject.copyFrom() 从 remoteFile 复制 localFile:

@Testpublic void whenDownloadFileUsingVfs_thenSuccess() throws IOException {    FileSystemManager manager = VFS.getManager();     FileObject local = manager.resolveFile(      System.getProperty("user.dir") + "/" + localDir + "vfsFile.txt");    FileObject remote = manager.resolveFile(      "sftp://" + username + ":" + password + "@" + remoteHost + "/" + remoteFile);     local.copyFrom(remote, Selectors.SELECT_SELF);     local.close();    remote.close();}

5. 结束

在本文中,我们学习了如何使用 Java 从远程 SFTP 服务器上传和下载文件。 为此,我们使用了多个库:JSchSSHJApache Commons VFS

完整的源代码可以在 over on GitHub 中找到。

来源地址:https://blog.csdn.net/wjw465150/article/details/126670291

--结束END--

本文标题: 在Java中使用SFTP传输文件

本文链接: https://www.lsjlt.com/news/380403.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在Java中使用SFTP传输文件
    1. 概述 在本教程中,我们将讨论如何在Java中使用SFTP从远程服务器上传和下载文件。 我们将使用三个不同的库:JSch、SSHJ 和 Apache Commons VFS来实现。 2. 使用 JSch 首先,让我们看看如何使用JSch...
    99+
    2023-08-25
    java 服务器 apache
  • Linux中怎么使用sftp传输文件/文件夹
    本篇内容主要讲解“Linux中怎么使用sftp传输文件/文件夹”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux中怎么使用sftp传输文件/文件夹”吧!sftp是一种安全的文件传送协议,是...
    99+
    2023-06-27
  • 怎么在Linux系统中使用SFTP方式传输文件
    本篇文章给大家分享的是有关怎么在Linux系统中使用SFTP方式传输文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 在xftp里新建一个连接,注意协议需要选择SFTP,然后...
    99+
    2023-06-13
  • [linux] SFTP文件传输基本命令
    SFTP文件传输基本命令 - 木洒 - 博客园 (cnblogs.com) 1.sftp建立连接 [root@localhost ~]# sftp username@remote_ip(or remote host name),      ...
    99+
    2023-08-31
    linux 服务器 运维
  • python通过sftp远程传输文件
    python提供了一个第三方模块paramiko,通过这个模块可以实现两台机器之间的网络连接,sftp是paramiko的一个方法,使用sftp可以在两台机器之间互相传输拷贝文件。然而paramiko的sftp只能拷贝文件,...
    99+
    2023-01-31
    传输文件 python sftp
  • Linux怎么利用sftp命令传输文件
    这篇文章主要讲解了“Linux怎么利用sftp命令传输文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux怎么利用sftp命令传输文件”吧!  sftp是Linux系统中的命令,使用...
    99+
    2023-06-13
  • java- SFTP文件上传下载
    JSch - SFTP文件上传下载 文章目录 JSch - SFTP文件上传下载1. JSch简介2. ChannelSftp常用ApiJSch支持三种文件传输模式文件上传 put() 方法文...
    99+
    2023-09-30
    java 服务器
  • 如何使用安全的文件传输协议(SFTP)保护CentOS服务器上的文件传输
    要在CentOS服务器上使用安全的文件传输协议(SFTP)来保护文件传输,需要执行以下步骤:1. 安装OpenSSH服务器:```s...
    99+
    2023-10-09
    CentOS
  • Python使用sftp实现传文件夹和文件
    利用python的sftp实现文件上传,可以是文件,也可以是文件夹。 版本Python2.7.13 应该不用pip安装更多的插件,都是自带的 不多说 上代码 # -*- codi...
    99+
    2024-04-02
  • 如何在java中使用socket对zip文件进行传输
    今天就跟大家聊聊有关如何在java中使用socket对zip文件进行传输,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。服务器端程序:import java.io.*;import j...
    99+
    2023-05-31
    java socket zip文件
  • 怎么在shell脚本里使用sftp批量传送文件
    本篇内容介绍了“怎么在shell脚本里使用sftp批量传送文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如何在shell脚本里使用sft...
    99+
    2023-06-06
  • 怎么使用java socket传输大文件
    要使用Java Socket传输大文件,可以使用以下步骤:1. 创建一个ServerSocket对象来监听某个端口号,等待客户端连接...
    99+
    2023-09-23
    java
  • Python怎么使用sftp实现传文件夹和文件
    小编给大家分享一下Python怎么使用sftp实现传文件夹和文件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是...
    99+
    2023-06-14
  • 使用sftp命令上传文件夹方法
    # 前言sftp上传单个文件使用put,多个文件可使用mput,但是要上传整个文件夹,则比较复杂,需要使用多个命令组合,包括find、awk等。# sftp上传文件夹```#!/bin/bash sss=`find /ngs/ec...
    99+
    2023-06-06
  • Java使用Sftp和Ftp实现对文件的上传和下载
    sftp和ftp两种方式区别,还不清楚的,请自行百度查询,此处不多赘述。完整代码地址在结尾!! 第一步,导入maven依赖 <!-- FTP依赖包 --> <...
    99+
    2024-04-02
  • 怎么在linux中使用nc命令传输文件
    本篇文章为大家展示了怎么在linux中使用nc命令传输文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。目的主机监听 nc -l 监听端口[ 未使用端口] > 要接收的文件名 nc -l 44...
    99+
    2023-06-12
  • 如何在golang中使用WebSocket进行文件传输
    如何在golang中使用WebSocket进行文件传输WebSocket是一种支持双向通信的网络协议,能够在浏览器和服务器之间建立持久的连接。在golang中,我们可以使用第三方库gorilla/websocket来实现WebSocket功...
    99+
    2023-12-18
    Golang websocket 文件传输
  • 使用golang上传文件到SFTP主机失败
    欢迎各位小伙伴来到编程网,相聚于此都是缘哈哈哈!今天我给大家带来《使用golang上传文件到SFTP主机失败》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以...
    99+
    2024-04-04
  • Linux中怎么使用sFTP进行上传和下载文件
    这篇文章主要讲解了“Linux中怎么使用sFTP进行上传和下载文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中怎么使用sFTP进行上传和下载文件”吧!sftp是一种安全的文件传...
    99+
    2023-06-27
  • 还在使用文件传输协议传输机密文件?你可能是对文件传输协议有什么误会
    文件传输协议(FTP)为用户提供了一种从一个位置临时向另一个位置发送文件和信息的简单方法。FTP提供了一种在计算机(或服务器)之间建立通信以进行文件传输的介质。尽管它仍然是一种广泛使用且被大众熟知的文件传输方法,但人们对FTP有诸多误解,以...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作