文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java连接sftp服务器实现上传下载

2023-10-07 19:29

关注

前言

我最初的需求是java读取远程windows服务器的文件。查了一圈,发现将远程服务器作为ftp服务器是最方便快捷的。着手准备,首先要让远程服务器提供ftp服务,再做相关配置,然后通过代码配置远程地址,用户名密码(ftp服务设置)读取文件。

一、给目标服务器安装sshd服务

二、基础配置

  1. 双击打开安装好的程序,在右下角找到图标,右键,setting
    加粗样式
  2. 按照步骤配置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. unload之后重新打开,配置生效
    在这里插入图片描述

三、java实现上传下载(main方法中有测试用例)

import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.util.*;import com.jcraft.jsch.*;import org.apache.commons.io.IOUtils;import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class SFTPUtil {    private transient Logger log = LoggerFactory.getLogger(this.getClass());    private ChannelSftp sftp;    private Session session;        private String username;        private String password;        private String privateKey;        private String host;        private int port;        public SFTPUtil(String username, String password, String host, int port) {        this.username = username;        this.password = password;        this.host = host;        this.port = port;    }        public SFTPUtil(String username, String host, int port, String privateKey) {        this.username = username;        this.host = host;        this.port = port;        this.privateKey = privateKey;    }    public SFTPUtil(){}        public void login(){        try {            JSch jsch = new JSch();            if (privateKey != null) {                jsch.addIdentity(privateKey);// 设置私钥                log.info("sftp connect,path of private key file:{}" , privateKey);            }            log.info("sftp connect by host:{} username:{}",host,username);            session = jsch.getSession(username, host, port);            log.info("Session is build");            if (password != null) {                session.setPassword(password);            }            Properties config = new Properties();            config.put("StrictHostKeyChecking", "no");            session.setConfig(config);            session.connect();            log.info("Session is connected");            Channel channel = session.openChannel("sftp");            channel.connect();            log.info("channel is connected");            sftp = (ChannelSftp) channel;            log.info(String.format("sftp server host:[%s] port:[%s] is connect successfull", host, port));        } catch (JSchException e) {            log.error("Cannot connect to specified sftp server : {}:{} \n Exception message is: {}", new Object[]{host, port, e.getMessage()});        }    }        public void logout(){        if (sftp != null) {            if (sftp.isConnected()) {                sftp.disconnect();                log.info("sftp is closed already");            }        }        if (session != null) {            if (session.isConnected()) {                session.disconnect();                log.info("sshSession is closed already");            }        }    }        public void upload(String directory, String sftpFileName, InputStream input) throws SftpException{        try {            sftp.cd(directory);        } catch (SftpException e) {            log.warn("directory is not exist");            sftp.mkdir(directory);            sftp.cd(directory);        }        sftp.put(input, sftpFileName);        log.info("file:{} is upload successful" , sftpFileName);    }        public void upload(String directory, String uploadFile) throws FileNotFoundException, SftpException{        File file = new File(uploadFile);        upload(directory, file.getName(), new FileInputStream(file));    }        public void upload(String directory, String sftpFileName, byte[] byteArr) throws SftpException{        upload(directory, sftpFileName, new ByteArrayInputStream(byteArr));    }        public void upload(String directory, String sftpFileName, String dataStr, String charsetName) throws UnsupportedEncodingException, SftpException{        upload(directory, sftpFileName, new ByteArrayInputStream(dataStr.getBytes(charsetName)));    }        public void download(String directory, String downloadFile, String saveFile) throws SftpException, FileNotFoundException{        if (directory != null && !"".equals(directory)) {            sftp.cd(directory);        }        File file = new File(saveFile);        sftp.get(downloadFile, new FileOutputStream(file));        log.info("file:{} is download successful" , downloadFile);    }        public byte[] download(String directory, String downloadFile) throws SftpException, IOException{        if (directory != null && !"".equals(directory)) {            sftp.cd(directory);        }        InputStream is = sftp.get(downloadFile);        byte[] fileData = IOUtils.toByteArray(is);        log.info("file:{} is download successful" , downloadFile);        return fileData;    }        public void delete(String directory, String deleteFile) throws SftpException{        sftp.cd(directory);        sftp.rm(deleteFile);    }        public Vector<?> listFiles(String directory) throws SftpException {        return sftp.ls(directory);    }    public static void main(String[] args) throws SftpException, IOException {//        SFTPUtil sftp = new SFTPUtil("user1", "123456", "192.168.0.244", 22);//        sftp.login();//        byte[] buff = sftp.download("/", "index.js");//        SFTPUtil sftp = new SFTPUtil("user", "123456", "192.168.0.162", 22);//        sftp.login();//        byte[] buff = sftp.download("/a", "ECDSAKey.cfg");//        System.out.println(new String(buff));//        File file = new File("C:\\Program Files (x86)\\NetSarang\\Xmanager Enterprise 4\\2.txt");//        InputStream is = new FileInputStream(file);//        sftp.upload("/usr/ywnysftp/upload/test", "csdn1.png", is);//        sftp.upload("/upload", "2.txt", is);        // 下载,上面的是之前的测试案例        SFTPUtil sftp = new SFTPUtil("user", "12345678", "192.168.0.64", 22);        sftp.login();        byte[] buff = sftp.download("/", "导入数据.xlsx");        IOUtils.write(buff, new FileOutputStream("C:\\Users\\win20\\Desktop\\file\\导入数据.xlsx"));        sftp.logout();    }}

来源地址:https://blog.csdn.net/laolvbig/article/details/132024462

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯