java中实现SFTP上传下载

记录项目中使用的一些实用技术:

package com.util;

import com.jcraft.jsch.*;

import java.io.File;
import java.util.Properties;

public class SftpUtil {

    /**
     * 从SFTP服务器下载文件
     *
     * @param ftpHost     SFTP IP地址
     * @param ftpUserName SFTP 用户名
     * @param ftpPassword SFTP用户名密码
     * @param ftpPort     SFTP端口
     * @param ftpPath     SFTP服务器中文件所在路径 格式: ftptest/aa
     * @param localPath   下载到本地的位置 格式:H:/download
     * @param fileName    文件名称
     */
    public static boolean downloadSftpFile(String ftpHost, String ftpUserName,
                                           String ftpPassword, int ftpPort, String ftpPath, String localPath,
                                           String fileName) {
        //文件存在
        boolean fileExist = true;

        Session session = null;
        Channel channel = null;
        ChannelSftp chSftp = null;
        try {
            JSch jsch = new JSch();
            session = jsch.getSession(ftpUserName, ftpHost, ftpPort);
            session.setTimeout(100000);
            session.setPassword(ftpPassword);
            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig("kex", "diffie-hellman-group1-sha1");
            session.setConfig(config);
            session.connect();

            channel = session.openChannel("sftp");
            channel.connect();
            chSftp = (ChannelSftp) channel;

            String ftpFilePath = ftpPath + fileName;
            String localFilePath = localPath + fileName;

            chSftp.get(ftpFilePath, localFilePath);
        } catch (Exception e) {
            e.printStackTrace();
            fileExist = false;
        } finally {
            if (chSftp != null) {
                chSftp.quit();
            }
            if (channel != null) {
                channel.disconnect();
            }
            if (session != null) {
                session.disconnect();
            }
        }
        return fileExist;
    }

    /**
     * 上传文件到SFTP服务器
     *
     * @param ftpHost     SFTP IP地址
     * @param ftpUserName SFTP 用户名
     * @param ftpPassword SFTP用户名密码
     * @param ftpPort     SFTP端口
     * @param sftpPath    sftp上传路径
     * @param localPath   本地文件所在路径
     * @param fileName    本地文件名称
     */
    public static boolean uploadSftpFile(String ftpHost, String ftpUserName,
                                      String ftpPassword, int ftpPort, String sftpPath, String localPath,
                                      String fileName) {
        boolean fileExist = true;
        Session session = null;
        Channel channel = null;
        ChannelSftp chSftp = null;
        try {
            JSch jsch = new JSch();
            session = jsch.getSession(ftpUserName, ftpHost, ftpPort);
            session.setPassword(ftpPassword);
            session.setTimeout(100000);
            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.connect();

            channel = session.openChannel("sftp");
            channel.connect();
            chSftp = (ChannelSftp) channel;

            String ftpFilePath = sftpPath + File.separatorChar + fileName;
            String localFilePath = localPath + File.separatorChar + fileName;


            chSftp.put(localFilePath, ftpFilePath);
        } catch (Exception e) {
            e.printStackTrace();
            fileExist = false;
        } finally {
            if (chSftp != null) {
                chSftp.quit();
            }
            if (channel != null) {
                channel.disconnect();
            }
            if (session != null) {
                session.disconnect();
            }
        }
        return fileExist;
    }

    /**
     * 删除本地文件
     *
     * @param localPath 本地文件所在路径
     */
    public static boolean deleteFile(String localPath) throws JSchException {
        boolean fileExist = false;
        try {
            //根据路径创建文件对象
            File file = new File(localPath);
            //路径是个文件且不为空时删除文件
            if (file.isFile() && file.exists()) {
                //删除失败时,返回false
                fileExist = file.delete();
            }
        } catch (Exception e) {
            e.printStackTrace();
            fileExist = false;
        }
        return fileExist;
    }


}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以通过使用Apache Commons Net库来实现FTP和SFTP的登录、上传和下载功能。 对于FTP登录,首先需要建立一个FTPClient对象,并设置FTP服务器的地址、端口号、用户名和密码等登录信息。然后调用connect方法进行连接,再调用login方法进行登录验证。登录成功后,可以调用listFiles方法获取目录列表,或调用retrieveFile方法下载文件,调用storeFile方法上传文件,调用deleteFile方法删除文件,调用logout方法退出登录,最后调用disconnect方法关闭连接。 对于SFTP登录,可以使用JSch库来实现。首先需要建立一个JSch对象,并设置SFTP服务器的地址、端口号、用户名和密码等登录信息。然后调用getSession方法创建一个Session对象,并设置一些属性,如设置StrictHostKeyChecking属性为"no",以允许自动接受主机密钥。接着调用connect方法进行连接,再调用authenticate方法进行身份验证。验证成功后,可以调用getChannelSftp方法获取一个ChannelSftp对象,通过该对象可以调用ls方法获取目录列表,调用get方法下载文件,调用put方法上传文件,调用rm方法删除文件,调用exit方法退出登录,最后调用disconnect方法关闭连接。 需要注意的是,FTP是明文传输,不安全,而SFTP是使用SSH进行加密传输,相对较安全。因此,在实际应用,建议使用SFTP来进行文件传输,以保障数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值