Java中将本服务器的文件拷贝到另一个服务器(Linux to Linux)

这篇具有很好参考价值的文章主要介绍了Java中将本服务器的文件拷贝到另一个服务器(Linux to Linux)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Java中,将文件从一个服务器复制到另一个服务器,你可以使用Secure Copy(SCP)进行操作。Java中的JSch库可以进行此操作。

首先,需要添加JSch库依赖到你的项目中。如果你使用的是Maven,可以添加以下依赖:

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

以下是一个使用JSch进行SCP操作的示例:

import com.jcraft.jsch.*;

public class Main {
    public static void main(String[] args) {
        String user = "username";
        String host = "hostname";
        String rfile = "/path/to/remote/file.txt";
        String lfile = "/path/to/local/file.txt";

        JSch jsch = new JSch();
        Session session = jsch.getSession(user, host, 22);
        UserInfo ui = new MyUserInfo("password");
        session.setUserInfo(ui);
        session.connect();

        Channel channel = session.openChannel("exec");
        ((ChannelExec) channel).setCommand("scp -t " + rfile);

        OutputStream out = channel.getOutputStream();
        InputStream in = channel.getInputStream();

        channel.connect();

        byte[] buf = new byte[1024];
        buf[0] = 0;
        out.write(buf, 0, 1);
        out.flush();

        // 发送文件
        File file = new File(lfile);
        long filesize = file.length();
        String command = "C0644 " + filesize + " ";
        if (lfile.lastIndexOf('/') > 0){
            command += lfile.substring(lfile.lastIndexOf('/')+1);
        } else {
            command += lfile;
        }
        command += "\n";
        out.write(command.getBytes());
        out.flush();

        // 以流的形式进行读写
        FileInputStream fis = new FileInputStream(file);
        while (true) {
            int len = fis.read(buf, 0, buf.length);
            if (len <= 0) break;
            out.write(buf, 0, len);
        }
        fis.close();
        
        buf[0] = 0;
        out.write(buf, 0, 1);
        out.flush();

        out.close();
        channel.disconnect();
        session.disconnect();
    }

    public static class MyUserInfo implements UserInfo {
        private String password;

        public MyUserInfo(String password) {
            this.password = password;
        }

        @Override
        public String getPassphrase() {
            return null;
        }

        @Override
        public String getPassword() {
            return password;
        }

        @Override
        public boolean promptPassword(String s) {
            return true;
        }

        @Override
        public boolean promptPassphrase(String s) {
            return false;
        }

        @Override
        public boolean promptYesNo(String s) {
            return true;
        }

        @Override
        public void showMessage(String s) {
            System.out.println(s);
        }
    }
}

这段代码首先创建了一个用于SCP的连接,然后按照SCP的通信格式,发送了文件信息和文件内容。其中MyUserInfo类用于处理连接时的身份验证。

你的要求中提到“附带中文注释”,这个需求可能需要你进一步明确。如果你指的是在源代码中添加中文注释,那么你可以在上面的代码中随意添加。如果你需要在传输的文件中添加注释,那么你需要先修改本地文件,然然后再进行文件的传输。这将取决于文件的类型和格式,如果是文本文件,你可以直接在文件中添加注释。

请注意,在使用上述代码时,需要将usernamehostname/path/to/remote/file.txt/path/to/local/file.txt替换为你的实际情况。同时,MyUserInfo类中的password应替换为实际的用户密码。

另外,该段代码假设你的服务器使用的是22端口进行SSH连接,如果你的服务器使用的端口不是22,需要将代码中的22替换为你的实际端口。同时,代码中的"scp -t " + rfile是SCP的标准命令,用于将文件复制到服务器的指定路径,rfile代表远程服务器上的文件路径。

这段代码没有处理所有可能出现的异常,你可能需要根据需要添加适当的异常处理代码。同时,由于网络传输可能会较慢,你可能需要在实际应用中添加超时处理的逻辑。文章来源地址https://www.toymoban.com/news/detail-535624.html

到了这里,关于Java中将本服务器的文件拷贝到另一个服务器(Linux to Linux)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • anaconda环境迁移到另一个服务器

    两个服务器上的显卡和cuda的安装都是相同的 (本来打算直接复制-粘贴来迁移环境的,但是anaconda文件夹直接有80多G,遂放弃(没想到环境竟然可以有这么大的内存)。) 1.在某一个conda环境(或者base环境)中,安装conda-pack 2.打包环境 打包后的压缩包在当前目录,linux系统下

    2024年01月24日
    浏览(68)
  • 迁移Linux服务器用户数据(将一个服务器的Linux用户数据迁移到另一个Linux服务器用户的流程)

    先来到根目录,再使用tar命令打包数据: tar czvf root.zip.gz ./* 在根目录使用指令: scp 打包好的数据 用户@ip:目的用户下的某个目录 源Linux服务器用户 : 查看压缩包是否到达: 对收到的数据进行解压,使用指令 tar xzvf root.zip.gz 解压到当前目录下。 目的Linux服务器用户 : 看到

    2024年02月08日
    浏览(49)
  • java中将一个实体类复制到另一个实体类的三种方法

    这两天在做发票识别时,遇到一个问题,有一张发票表(假设为invoice_OCR_success)和一张我根据发票表新建的表(假设为invoice_OCR_fail),两张表有些字段名是相同的,有时需要把其中一张表的实例在另一张表里保存一份,此时就用到了实体类的复制,以下我将列出三种尝试的

    2024年02月13日
    浏览(49)
  • Linux拷贝服务器文件夹到本地

    方法1: scp命令 scp命令是用于通过 SSH 协议安全地将文件复制到远程系统和从远程系统复制文件到本地的命令。它是  Secure Copy  的缩写,表示安全拷贝。 scp  可以使我们通过网络,把文件从一台电脑拷贝到另一台电脑。 Linux SCP 命令是一种在两个远程节点之间传输文件的便捷

    2024年01月19日
    浏览(65)
  • linux 拷贝文件到远程服务器的方法

    拷贝文件常用的命令为 scp 和 rsync 。 使用 scp 拷贝文件的时候,如果不是 root 用户无法直接拷贝到没有权限写入的文件夹。一般常用的做法是先将文件拷贝到 home 文件夹下,然后再远程使用 sudo 命令进行复制。 使用 rsync 拷贝文件时,如果远程用户配置了 sudo 免密,则可以远

    2024年02月16日
    浏览(42)
  • Linux 服务器间SSH免密码登录与拷贝文件(SCP)

    工作中频繁登录服务器和拷贝文件,都会提示输入密码 在持续集成的场景下,自动部署应用时是没有人工干预的 下面以实现A服务器到B服务器的免密码登录和拷贝文件为例,介绍相关的配置。(即A访问B不需要输密码) A服务器(主服务器)地址:192.168.1.AAA B服务器(从服务

    2024年04月11日
    浏览(47)
  • Linux | Ubuntu20.04系统使用命令从移动硬盘/U盘拷贝文件到服务器上

    *确认自己移动硬盘、U盘的格式,本文为exfat格式 查看disk默认位置 查看最后的位置,我的显示为 Device, 位置为 /dev/sdb1 ,2048, (后面省略) *注意:此时无法直接查看硬盘内容 进入Linux系统主界面,如果是user的话,获取管理员权限 挂载移动硬盘/U盘 命令如下,其中/dev/sdb1为disk默

    2024年02月14日
    浏览(56)
  • 如何将服务器数据迁移到另一台服务器?

    将服务器数据迁移到另一台服务器通常涉及以下几个步骤: 1.备份数据: 在进行数据迁移之前,首先需要备份服务器上的数据。这包括网站文件、数据库、配置文件等。可以使用各种备份工具和方法,如rsync、scp、FTP、数据库备份工具等。 2.目标服务器准备: 准备目标服务器

    2024年04月09日
    浏览(74)
  • 腾讯云服务器镜像共享到另一账号的轻量级云服务器

    1.创建镜像,镜像制作完成后,点击镜像可查看 2.先共享镜像到另一账号 3.登录轻量云服务器账号镜像板块,复制共享镜像为自己的镜像 4.通过自己创建的镜像共享到轻量云服务器镜像内 到这一步镜像已经成功共享到轻量云服务器了 5.接下来我们通过镜像重装系统 (注意:重

    2024年02月11日
    浏览(50)
  • 移植conda环境到另一台服务器上

    安装conda-pack这个包 打包环境 my_env是你想要打包的环境名 执行该指令,会在你当前的路径生成一个my_env.tar.gz的压缩文件 把该压缩文件传输到你的另一台机子 这里可以使用scp命令传输,或者其他软件传输 例如我把当前目录的semi.tar.gz压缩文件传输到另一台服务器(用户名为

    2024年02月07日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包