java实现sftp的批量处理_JAVA SFTP文件上传、下载及批量下载

本文介绍了如何使用JSch库在Java中实现SFTP的批量文件处理,包括文件的上传、下载和删除。通过SFTPUtils类封装了SFTP连接、断开以及文件操作的方法,例如`batchDownLoadFile()`用于批量下载符合特定格式的文件,`uploadFile()`用于上传文件,`deleteSFTP()`用于删除SFTP上的文件。同时提供了`DateUtil`类以方便处理时间相关操作。
摘要由CSDN通过智能技术生成

1.jsch官方API查看地址(附件为需要的jar)

http://www.jcraft.com/jsch/

2.jsch简介

JSch(Java Secure Channel)是一个SSH2的纯Java实现。它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序。

SFTP(Secure File Transfer Protocol)安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式,但是传输效率比普通的FTP要低。

3.api常用的方法:

put():      文件上传

get():      文件下载

cd():       进入指定目录

ls():       得到指定目录下的文件列表

rename():   重命名指定文件或目录

rm():       删除指定文件

mkdir():    创建目录

rmdir():    删除目录

put和get都有多个重载方法,自己看源代码

4.对常用方法的使用,封装成一个util类

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.Properties;

import java.util.Vector;

import org.apache.log4j.Logger;

import com.jcraft.jsch.Channel;

import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.Session;

import com.jcraft.jsch.SftpATTRS;

import com.jcraft.jsch.SftpException;

import com.jcraft.jsch.ChannelSftp.LsEntry;

/**

* sftp工具类

*

* @author xxx

* @date 2014-6-17

* @time 下午1:39:44

* @version 1.0

*/

public class SFTPUtils

{

private static Logger log = Logger.getLogger(SFTPUtils.class.getName());

private String host;//服务器连接ip

private String username;//用户名

private String password;//密码

private int port = 22;//端口号

private ChannelSftp sftp = null;

private Session sshSession = null;

public SFTPUtils(){}

public SFTPUtils(String host, int port, String username, String password)

{

this.host = host;

this.username = username;

this.password = password;

this.port = port;

}

public SFTPUtils(String host, String username, String password)

{

this.host = host;

this.username = username;

this.password = password;

}

/**

* 通过SFTP连接服务器

*/

public void connect()

{

try

{

JSch jsch = new JSch();

jsch.getSession(username, host, port);

sshSession = jsch.getSession(username, host, port);

if (log.isInfoEnabled())

{

log.info("Session created.");

}

sshSession.setPassword(password);

Properties sshConfig = new Properties();

sshConfig.put("StrictHostKeyChecking", "no");

sshSession.setConfig(sshConfig);

sshSession.connect();

if (log.isInfoEnabled())

{

log.info("Session connected.");

}

Channel channel = sshSession.openChannel("sftp");

channel.connect();

if (log.isInfoEnabled())

{

log.info("Opening Channel.");

}

sftp = (ChannelSftp) channel;

if (log.isInfoEnabled())

{

log.info("Connected to " + host + ".");

}

}

catch (Exception e)

{

e.printStackTrace();

}

}

/**

* 关闭连接

*/

public void disconnect()

{

if (this.sftp != null)

{

以下是使用JSch库实现Java SFTP批量上传文件的完整代码: ``` import com.jcraft.jsch.*; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Properties; public class SftpBatchUpload { private static final String HOST = "sftp.example.com"; // SFTP服务器地址 private static final int PORT = 22; // SFTP服务器端口号 private static final String USERNAME = "username"; // SFTP服务器登录用户名 private static final String PASSWORD = "password"; // SFTP服务器登录密码 private static final String REMOTE_PATH = "/upload/"; // SFTP服务器上传文件路径 public static void main(String[] args) { JSch jsch = new JSch(); Session session = null; ChannelSftp channelSftp = null; try { // 创建SFTP会话 session = jsch.getSession(USERNAME, HOST, PORT); session.setPassword(PASSWORD); Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.connect(); channelSftp = (ChannelSftp) session.openChannel("sftp"); channelSftp.connect(); // 批量上传文件 String localPath = "C:\\local\\path\\"; // 本地文件路径 File localDir = new File(localPath); File[] localFiles = localDir.listFiles(); for (File localFile : localFiles) { if (localFile.isFile()) { String remoteFile = localFile.getName(); channelSftp.put(new FileInputStream(localFile), REMOTE_PATH + remoteFile); System.out.println("上传文件" + localFile.getAbsolutePath() + "到" + REMOTE_PATH + remoteFile + "成功!"); } } } catch (JSchException e) { e.printStackTrace(); } catch (SftpException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { // 关闭SFTP连接和会话 if (channelSftp != null) { channelSftp.disconnect(); } if (session != null) { session.disconnect(); } } } } ``` 其中,需要替换的常量有: - HOST:SFTP服务器地址 - PORT:SFTP服务器端口号 - USERNAME:SFTP服务器登录用户名 - PASSWORD:SFTP服务器登录密码 - REMOTE_PATH:SFTP服务器上传文件路径 代码中的批量上传文件逻辑是,将本地路径为C:\local\path\下的所有文件上传SFTP服务器的REMOTE_PATH路径下。如果需要更改本地文件路径或者上传文件的后缀名等属性,可以根据实际需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值