java - 如何使用 Java SFTP Library JSch 将文件从一个目录传输到另一个目录?

标签 java sftp jsch

我需要使用 JSch 库编写文件传输程序。我有一个包含两个文件夹的简单目录 -

enter image description here

SFTP_1 文件夹中,我有一个位图图像。 SFTP_2 文件夹只是一个空文件夹。我的目标是使用 SFTP 将图像从 SFTP_1 传输到 SFTP_2。

到目前为止,这是我的代码:

FileTransfer fileTransfer = new FileTransfer();              
      
JSch jsch = new JSch();

String host = "127.0.0.1";
int port = 22;

String user = "user";
Session session = jsch.getSession(user, host, port);      
session = jsch.getSession("username", "127.0.0.1", 22);
session.connect();

ChannelSftp sftp = null;
sftp = (ChannelSftp)session.openChannel("sftp") ; //channel;

sftp.rename(
    "C:\\Users\\ADMIN\\Desktop\\Work\\ConnectOne_Bancorp\\Java_Work\\SFTP_1\\house.bmp",
    "C:\\Users\\ADMIN\\Desktop\\Work\\ConnectOne_Bancorp\\Java_Work\\SFTP_2\\house.bmp");
session.disconnect();

我想做的是简单地将文件从我机器的一个目录传输到另一个目录。任何提示表示赞赏,谢谢!

最佳答案

请注意,要在两个文件夹之间进行复制,一个不需要使用 SFTP。人们可以从一个文件夹复制到另一个文件夹而不涉及 SFTP 协议(protocol),该协议(protocol)主要用于远程复制文件,从本地机器到远程机器,或从远程机器到(相同或不同的)远程机器,或从远程机器到本地机器。

那是因为 FTP 是一种基于网络的协议(protocol)。所以使用它(或任何它的相关协议(protocol))将使用网络(或模拟网络)。

JSch 提供的安全性旨在防止网络上发生的某些类型的攻击。它不会在机器内提供任何额外的安全性。

要在一台机器上的文件夹之间复制文件,最简单的方法就是不使用 JSch,就像这样

private static void copyFileUsingJava7Files(File source, File dest)
        throws IOException {
    Files.copy(source.toPath(), dest.toPath());
}

还有其他技术,如果你真的想使用 JSch,你需要意识到 JSch 必须提供很多“额外”信息才能连接到你所在的机器,因为它会尝试连接到这个机器就像是通过网络连接一样

Session sessionRead = jsch.getSession("username", "127.0.0.1", 22);
sessionRead.connect();

Session sessionWrite = jsch.getSession("username", "127.0.0.1", 22);
sessionWrite.connect();

ChannelSftp channelRead = (ChannelSftp)sessionRead.openChannel("sftp");
channelRead.connect();

ChannelSftp channelWrite = (ChannelSftp)sessionWrite.openChannel("sftp");
channelWrite.connect();

PipedInputStream pin = new PipedInputStream(2048);
PipedOutputStream pout = new PipedOutputStream(pin);

channelRead.get("/path/to/your/file/including/filename.txt", pout);
channelWrite.put(pin, "/path/to/your/file/destination/including/filename.txt");

channelRead.disconnect();
channelWrite.disconnect();

sessionRead.disconnect();
sessionWrite.disconnect();

上面的代码缺少错误检查、异常处理以及文件丢失、网络未启动等情况下的回退例程。但是您应该明白了主要思想。

同样显而易见的是,在不需要存在网络协议(protocol)的情况下使用网络协议(protocol)会为更多的故障场景打开大门。如果您的程序很快要复制不在您计算机上的文件,则仅使用 SFTP 方法。

关于java - 如何使用 Java SFTP Library JSch 将文件从一个目录传输到另一个目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32787456/

相关文章:

java - 如何在Java中画一条蠕虫线?

java - Spring MVC 中的多数据源切换问题。当第二个数据源不可用时,它会自动使用第一个数据源,其中引用第二个数据源

python - 从 SFTP 文件读取 CSV/Excel 文件,使用 Pandas 对这些文件进行一些更改,然后保存回来

java - 使用 JSch setCommand 执行时,带有源选项的 Shell ping 命令失败

java - 使用 Jsch 绕过或强制 session 身份验证

java - 从 EditText 获取字符串,没有可空错误

c - FTPopen()、FTPclose() 等的 API 文档。等人。串联

java - Spring 集成: issue with failureChannel

java - 使用双因素身份验证的 JSCH SFTP 登录

java - 为什么我的图像没有充满绿色?