在Java中使用SFTP传输文件

这篇具有很好参考价值的文章主要介绍了在Java中使用SFTP传输文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 概述

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

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

2. 使用 JSch

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

2.1. Maven 配置

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

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>

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():

@Test
public 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() 从远程服务器下载文件:

@Test
public 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 中:

<dependency>
    <groupId>com.hierynomus</groupId>
    <artifactId>sshj</artifactId>
    <version>0.27.0</version>
</dependency>

最新的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() 方法将文件上传到远程服务器

@Test
public 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()

@Test
public 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 中:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-vfs2</artifactId>
    <version>2.4</version>
</dependency>

最新版本的 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() 方法上传文件:

@Test
public 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:

@Test
public 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://www.toymoban.com/news/detail-448666.html

到了这里,关于在Java中使用SFTP传输文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 快速指南:使用Termux SFTP通过远程进行文件传输——”cpolar内网穿透“

    SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了加密和身份验证机制来保护数据的安全性和完整性,可以在不安全的网络中传输文件,因此更加安全可靠,。 下面介绍如何在termux 中使用SFTP 文件传输并结合[cpolar内网映

    2024年02月11日
    浏览(53)
  • SSH连接SFTP传输:如何使用libssh库在windows环境下进行(文件、文件夹)传输到远端服务器

    由于windows上的编译器一般都是没有libssh库的,所以如何我们想要使用libssh库那么我们将会使用cmake来编译libssh官网给出的源代码 libssh库下载地址: https://www.libssh.org/files/ 我们在编译libssh库之前需要先配置一些环境: a) 安装 Visual Studio 或者 MinGW b) 安装OpenSSL http://slproweb.com/p

    2024年04月24日
    浏览(68)
  • SSH连接SFTP传输:如何使用libssh库在Linux环境下进行(文件、文件夹)传输到远端服务器

    target_host :远端主机IP target_username :远端主机用户名 ssh_options_set() 函数设置会话的选项。最重要的选项是: SSH_OPTIONS_HOST:要连接到的主机的名称 SSH_OPTIONS_PORT:使用的端口(默认为端口 22) SSH_OPTIONS_USER:要连接的系统用户 SSH_OPTIONS_LOG_VERBOSITY:打印的消息数量 直接传输密

    2024年04月13日
    浏览(72)
  • 内网穿透的应用-如何在Termux 中使用SFTP 文件传输并结合内网穿透实现远程传输

    SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了加密和身份验证机制来保护数据的安全性和完整性,可以在不安全的网络中传输文件,因此更加安全可靠,。 下面介绍如何在termux 中使用SFTP 文件传输并结合[cpolar内网映

    2024年02月08日
    浏览(52)
  • [linux] SFTP文件传输基本命令

    SFTP文件传输基本命令 - 木洒 - 博客园 (cnblogs.com) 1.sftp建立连接 [root@localhost ~]# sftp username@remote_ip(or remote host name),      # 连接root用户, 则可省略\\\"root@\\\".  [root@localhost ~]# sftp -o port=1000 username@remote_ip [root@localhost ~]# sftp root@68.56.32.159 2.sftp - 上传文件:如果上传/下载的是文件夹, 在

    2024年01月25日
    浏览(36)
  • Shell脚本实现SFTP传输文件,通过密码形式

    cat 读取文件内容 grep server : 查找文件内容中包含server字符的,行内容 awk -F ‘=’ :实现字符串分割,分割字符’‘=’ ${print $2}: 其中$2 表示切割后数组中第几值 base -d :解码base64字符串,转为可识别字符串

    2024年02月12日
    浏览(48)
  • Java使用sftp文件服务器

    在工作中,对接第三方服务时,往往存在文件的传输使用,使用stfp是一种简单有效的方式,可以对文件进行上传和下载。下面是使用sftp文件服务器的demo,可以作为工具类放入项目中,即可简单上手和使用。

    2024年02月11日
    浏览(53)
  • 一文教你学会Termux+SFTP+远程文件传输

    SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了加密和身份验证机制来保护数据的安全性和完整性,可以在不安全的网络中传输文件,因此更加安全可靠,。 下面介绍如何在termux 中使用SFTP 文件传输并结合cpolar内网映

    2024年02月13日
    浏览(35)
  • OpenWRT配置SFTP远程文件传输,让数据分享更安全

    本次教程我们将在OpenWRT上安装SFTP服务,并结合cpolar内网穿透,创建安全隧道映射22端口,实现在公网环境下远程OpenWRT SFTP,安全地传输文件,比如备份文件、配置文件等。 SFTP是一种安全文件传输协议,它基于SSH协议,提供了加密、认证和数据完整性保护的安全文件传输服务

    2024年02月03日
    浏览(48)
  • 如何利用SFTP协议远程实现更安全的文件传输 ——【内网穿透】

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 : 《高效编程技巧》《cpolar》 ⛺️生活的理想,就是为了理想的生活! SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了加密和身份验证机制来保护数据的安全性和完整性,可以在

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包