package org.test.sftp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
import org.apache.commons.vfs.provider.sftp.SftpClientFactory;
import org.apache.commons.vfs.provider.sftp.SftpFileSystemConfigBuilder;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
public class SFTPClient {
public String ip;
public String port;
public String username;
public String password;
private ChannelSftp command;
private Session session;
public SFTPClient(String ip, String port, String username, String password) {
this.ip = ip;
this.port = port;
this.username = username;
this.password = password;
command = null;
}
public boolean connect() throws JSchException {
// If the client is already connected, disconnect
if (command != null) {
disconnect();
}
FileSystemOptions fso = new FileSystemOptions();
try {
SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(
fso, "no");
session = SftpClientFactory.createConnection(ip,
Integer.parseInt(port), username.toCharArray(),
password.toCharArray(), fso);
Channel channel = session.openChannel("sftp");
channel.connect();
command = (ChannelSftp) channel;
} catch (FileSystemException e) {
e.printStackTrace();
return false;
}
return command.isConnected();
}
public void disconnect() {
if (command != null) {
command.exit();
}
if (session != null) {
session.disconnect();
}
command = null;
}
protected boolean downloadFileAfterCheck(String remotePath, String localPath)
throws IOException {
FileOutputStream outputSrr = null;
try {
File file = new File(localPath);
if (!file.exists()) {
outputSrr = new FileOutputStream(localPath);
command.get(remotePath, outputSrr);
}
} catch (SftpException e) {
try {
System.err.println(remotePath + " not found in "
+ command.pwd());
} catch (SftpException e1) {
e1.printStackTrace();
}
e.printStackTrace();
return false;
} finally {
if (outputSrr != null) {
outputSrr.close();
}
}
return true;
}
protected boolean downloadFile(String remotePath, String localPath)
throws IOException {
FileOutputStream outputSrr = new FileOutputStream(localPath);
try {
command.get(remotePath, outputSrr);
} catch (SftpException e) {
try {
System.err.println(remotePath + " not found in "
+ command.pwd());
} catch (SftpException e1) {
e1.printStackTrace();
}
e.printStackTrace();
return false;
} finally {
if (outputSrr != null) {
outputSrr.close();
}
}
return true;
}
public boolean uploadFile(String localPath, String remotePath)
throws RuntimeException {
FileInputStream inputSrr = null;
try {
inputSrr = new FileInputStream(localPath);
command.put(inputSrr, remotePath);
} catch (SftpException e) {
e.printStackTrace();
throw new RuntimeException();
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException();
} finally {
IOUtils.closeQuietly(inputSrr);
disconnect();
}
return true;
}
}
分享到:
相关推荐
"SFTP上传下载文件工具"通常指的是支持SFTP协议的软件应用,这些应用使得用户能够方便地在本地计算机和远程服务器之间进行文件的上传和下载。描述中提到的"可直接文件夹传输"功能,意味着这款工具不仅支持单个文件的...
本项目“SFTP上传下载 MFC VS2010”专注于利用MFC(Microsoft Foundation Classes)库在Visual Studio 2010环境下实现SFTP的上传和下载功能。 MFC是微软提供的C++类库,它为Windows应用程序开发提供了丰富的接口,...
提供的压缩包文件“sftp上传下载”可能包含了实现这些功能的示例代码或更完整的解决方案,可以帮助开发者快速集成SFTP功能到他们的Java项目中。 总之,Java通过JSch库提供了强大的SFTP支持,使得在安全的环境中进行...
在Android平台上实现SFTP(Secure File Transfer Protocol,安全文件传输协议)上传和下载功能,是移动应用中处理远程文件操作的常见需求。SFTP是一种基于SSH的安全文件传输协议,它提供了在不安全网络环境中安全...
在进行FTP或SFTP上传下载时,需要注意文件权限设置、传输速率、文件大小等因素,并确保两端系统之间的兼容性。对于大型项目,可能需要使用自动化脚本或工具来批量处理文件传输。同时,为了提高效率和可靠性,可以...
python sftp上传下载
本文将详细讲解如何使用Java实现SFTP的上传、下载以及相关的批量操作、远程目录创建和文件删除功能。 首先,我们需要一个支持SFTP的Java库,例如JSch(Java Secure Channel)。JSch是一个开放源码的Java库,它实现...
以下是使用C#进行SFTP上传文件的基本步骤: 1. 引用库: ```csharp using Renci.SshNet; ``` 2. 创建SFTP客户端对象并设置连接参数: ```csharp var sshClient = new SftpClient("sftp服务器地址", "用户名",...
综上所述,实现SFTP上传下载功能涉及到前端交互设计、后端服务器开发、文件操作、网络通信以及安全性等多个方面,需要综合运用多种技术知识。这个项目为开发者提供了一个完整的实践案例,有助于加深对相关技术的理解...
本文将深入探讨如何在PowerBuilder 8.0(简称PB8.0)环境中利用psftp.exe工具进行SFTP的上传与下载操作。 **1. SFTP简介** SFTP是基于SSH(Secure Shell)协议的文件传输协议,它提供了加密的网络通信,确保数据在...
以上就是使用Java和JSCH库进行SFTP文件上传下载的基本步骤。在实际应用中,可能还需要处理异常、重试机制、文件夹操作、权限管理等更复杂的情况。不过,这个基础示例为你提供了一个良好的起点,你可以根据需求对其...
在IT行业中,Java是一种广泛应用的编程语言,尤其在企业级应用和网络服务方面。SFTP(Secure File Transfer ...在实际项目中,还可以考虑异常处理、并发上传下载、文件权限控制等高级特性,以提高系统的稳定性和效率。
该工具支持ftp和sftp的上传和下载 1
首先,让我们详细了解一下SFTP上传和下载的流程。在Java中,我们可以使用开源库JSch来实现SFTP操作。JSch库提供了连接到SFTP服务器、创建会话、打开通道、传输文件等方法。上传文件通常涉及以下步骤: 1. 创建JSch...
前面上传过一次,不能编辑了,重新上传...和前面那个相比,代码优化了一下:1)上传和下载完成的时候关闭FileStream(不关闭的话下载完成之后本地操作该文件会提示被占用),2)增加了连续下载多个文件(位于Form2)。
通过配置文件链接sftp服务器,下载指定文件,上传指定文件,常常用于更新服务器指定资源。
基于qt5+mingw+win7,里面包括有封装好的sftp库。参考原作者https://download.csdn.net/download/qq_26360165/10576625并修改。最简单的一个小demo
linux脚本sftp上传文件
适合java进行文件上传下载的童鞋们,常用方法已包装好,可直接使用。
在本案例中,我们将关注如何利用JSch库来实现SFTP文件的上传、下载和删除功能。 **SFTP基础** SFTP是基于SSH协议的文件传输协议,它提供了安全的数据传输,确保了文件传输过程中的数据完整性。与FTP不同,SFTP在...