博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sftp上传 - 待完
阅读量:5291 次
发布时间:2019-06-14

本文共 11576 字,大约阅读时间需要 38 分钟。

1、搭建本地sftp

  1.1、下载msftpsrvr.exe软件

      下载地址:

      

 

  1.2、双击msftpsrvr.exe,录入sftp信息

    

 

2、工具类

SftpUploadUtil

package com.hundsun.channel.util;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.util.Properties;import java.util.Vector;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import com.jcraft.jsch.Channel;import com.jcraft.jsch.ChannelSftp;import com.jcraft.jsch.JSch;import com.jcraft.jsch.JSchException;import com.jcraft.jsch.Session;import com.jcraft.jsch.SftpException;public class SftpUploadUtil {        public static final Log logger = LogFactory.getLog(SftpUploadUtil.class);        /**     * 连接sftp服务器     * @param host 主机     * @param port 端口     * @param username 用户名     * @param password 密码     * @param privateKey 密钥文件路径     * @param passphrase 密钥口令     * @return     */    public ChannelSftp connect(String host, int port, String username,String password,String privateKey,String passphrase) {     ChannelSftp sftp = null;     try {      JSch jsch = new JSch();      jsch.getSession(username, host, port);      if (privateKey != null && !"".equals(privateKey)) {          //使用密钥验证方式,密钥可以使有口令的密钥,也可以是没有口令的密钥          if (passphrase != null && !"".equals(passphrase)) {              jsch.addIdentity(privateKey, passphrase);          } else {              jsch.addIdentity(privateKey);          }      }                  Session sshSession = jsch.getSession(username, host, port);      System.out.println("Session created.");      if (password != null && !"".equals(password)) {          sshSession.setPassword(password);      }            Properties sshConfig = new Properties();      sshConfig.put("StrictHostKeyChecking", "no");      sshSession.setConfig(sshConfig);      sshSession.connect();      System.out.println("Session connected.");      System.out.println("Opening Channel.");      Channel channel = sshSession.openChannel("sftp");      channel.connect();      sftp = (ChannelSftp) channel;      System.out.println("Connected to " + host + ".");      //System.out.println("登录成功");     } catch (Exception e) {         System.out.println("------");         e.printStackTrace();     }     return sftp;    }    /**     * 关闭     * @param sftp     * @param sshSession     * @throws JSchException      */    public void close(ChannelSftp sftp) throws JSchException {        if (null!=sftp) {            if (null!=sftp.getSession()) {                sftp.getSession().disconnect();            }               sftp.disconnect();        }    }                /**     * 上传文件     * @param directory 上传的目录     * @param uploadFile 要上传的文件     * @param sftp     */    public void upload(String directory, String uploadFile, ChannelSftp sftp) {     try {      sftp.cd(directory);      File file=new File(uploadFile);      sftp.put(new FileInputStream(file), file.getName());      System.out.println("上传成功!");     } catch (Exception e) {      e.printStackTrace();     }    }    /**     * 下载文件     * @param directory 下载目录     * @param downloadFile 下载的文件     * @param saveFile 存在本地的路径     * @param sftp     */    public void download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) {        try {            logger.info("下载目录:" + directory + ",下载文件:" + downloadFile + ",存本地路径:" + saveFile);            sftp.cd(directory);            File file = new File(saveFile);            sftp.get(downloadFile, new FileOutputStream(file));        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * 删除文件     * @param directory 要删除文件所在目录     * @param deleteFile 要删除的文件     * @param sftp     */    public void delete(String directory, String deleteFile, ChannelSftp sftp) {     try {      sftp.cd(directory);      sftp.rm(deleteFile);     } catch (Exception e) {      e.printStackTrace();     }    }     /**     * 列出目录下的文件     * @param directory 要列出的目录     * @param sftp     * @return     * @throws SftpException     */    public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException{     return sftp.ls(directory);    }        /**     * 创建文件夹     * @param sftp     * @param directory     * @throws SftpException      */    public void createFolder(ChannelSftp  sftp,String directory) throws SftpException {                      sftp.mkdir(directory);    }                public static void main(String[] args) {                /*        Vector
vector = new Vector
(); String host="192.168.54.112"; int port=22; String username="wjs"; String password="wjs@567"; //上传的目录 String directory="/home/wjs/upload/1001/"+DateUtil.getDateTime("yyyyMMdd", new Date()); System.out.println("directory:--------------"+directory); //要上传的文件 String uploadFile="F:\\upload\\1001\\20151102\\info_1001_9000_20151102.txt"; SftpUploadUtil sf = new SftpUploadUtil(); //获取连接 ChannelSftp sftp = sf.connect(host, port, username, password); //创建文件夹 try { //home/wjs/upload/1001 vector = sftp.ls(directory); } catch (SftpException e) { // TODO Auto-generated catch block if (e.id == 2 || "No such file".equals(e.getMessage())) { Iterator
it = vector.iterator(); while (it.hasNext()) { LsEntry lsEntry = it.next(); System.out.println(lsEntry.getLongname()); System.out.println(lsEntry.getLongname().startsWith("d")); } try { sftp.mkdir(directory); //上传文件 sf.upload(directory, uploadFile, sftp); File file = new File(uploadFile); long fileSize = file.length(); sftp.put(directory + "/info_1001_9000_20151026.txt", new FileProgressMonitor( fileSize), ChannelSftp.OVERWRITE); sftp.quit(); sf.close(sftp); } catch (SftpException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (JSchException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } } } */}}
View Code

 

3、测试连接

public static void main(String[] args) throws Exception {        SftpUploadUtil sfUtil = new SftpUploadUtil();        String sftpHost = "10.23.10.39";        int sftpPort = 22; // 端口表字段暂时未定义        String sftpUserName = "quanbs";        String password = "123456";        String privateKey = ""; // 秘钥文件路径        String passphrase = ""; // 秘钥口令        ChannelSftp sftp = sfUtil.connect(sftpHost, sftpPort, sftpUserName, password, privateKey, passphrase);    }

运行结果(连接成功):

 

4、测试sftp上传

public static void main(String[] args) throws Exception {        SftpUploadUtil sfUtil = new SftpUploadUtil();        String sftpHost = "10.23.10.39";        int sftpPort = 22; // 端口表字段暂时未定义        String sftpUserName = "quanbs";        String password = "123456";        String privateKey = ""; // 秘钥文件路径        String passphrase = ""; // 秘钥口令        ChannelSftp sftp = sfUtil.connect(sftpHost, sftpPort, sftpUserName, password, privateKey, passphrase);                // 测试sftp上传        testUploadFile(sfUtil, sftp);    }

 

/**     * 测试上传文件     * @param sfUtil     * @param sftp     * @throws SftpException     */    public static void testUploadFile(SftpUploadUtil sfUtil, ChannelSftp sftp) throws SftpException{        String sftpDirectory = "E:"+File.separator+"sftp";        sftpDirectory = "\\";        String uploadFile = "D:\\log.zip";        List lsList = getLsListName(File.separator, sftp); // 获取目录下的文件名List        String date = DateUtils.convertDateToLong(new Date(), "yyyyMMdd").toString(); // 当天文件夹 20161026        if (!lsList.contains(date)) // 当天日期文件夹不存在则创建            sftp.mkdir(date);                sftpDirectory += date;                sfUtil.upload(sftpDirectory, uploadFile, sftp);            }
/**     * 获取目录下的文件名List     * @param path 目录     * @param sftp     * @throws SftpException     */    private static List
getLsListName(String path, ChannelSftp sftp) throws SftpException{ List
list = new ArrayList
(); Vector vector = sftp.ls(File.separator); Iterator
it = vector.iterator(); while (it.hasNext()) { LsEntry lsEntry = it.next(); list.add(lsEntry.getFilename()); } return list; }

运行结果:

 

 附:

DateUtils

package com.hundsun.channel.util;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class DateUtils {    public static SimpleDateFormat FORMAT_DATE = new SimpleDateFormat("yyyy-MM-dd");    public static SimpleDateFormat FORMAT_DATETIME = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    public static SimpleDateFormat FORMAT_DATE_SIMPLE = new SimpleDateFormat("yyyyMMdd");    public static SimpleDateFormat FORMAT_DATETIME_SIMPLE = new SimpleDateFormat("yyyyMMddHHmmss");    public static SimpleDateFormat FORMAT_DATE_CN = new SimpleDateFormat("yyyy��MM��dd��");    public static SimpleDateFormat FORMAT_DATETIME_CN = new SimpleDateFormat("yyyy��MM��dd��HHʱmm��ss��");    public static SimpleDateFormat FORMAT_DATETIME_HOUR = new SimpleDateFormat("yyyy-MM-dd HH:mm");    public static Date getDateTime(String dateStr, SimpleDateFormat format) {        Date date = null;        try {            date = format.parse(dateStr);        } catch (ParseException e) {            return null;        }        return date;    }    public static String getDateTimeStr(Date date, SimpleDateFormat format) {        if (date == null || format == null) {            return null;        }        return format.format(date);    }    public static Date getDate(String dateStr) {        if (dateStr == null || "".equals(dateStr)) {            return null;        }        return getDateTime(dateStr, FORMAT_DATE);    }    public static Date getDateTime(String dateStr) {        return getDateTime(dateStr, FORMAT_DATETIME);    }    public static String getDateStr(Date date) {        return getDateTimeStr(date, FORMAT_DATE);    }    public static String getDateTimeStr(Date date) {        return getDateTimeStr(date, FORMAT_DATETIME);    }    public static long getDiffDays(Date startTime, Date endTime) {        long quot = 0;        if (startTime == null || endTime == null) {            return quot;        }        SimpleDateFormat ft = new SimpleDateFormat("yyyy/MM/dd");        try {            Date endDate = ft.parse(ft.format(endTime));            Date startDate = ft.parse(ft.format(startTime));            quot = endDate.getTime() - startDate.getTime();            quot = quot / 1000 / 60 / 60 / 24;        } catch (ParseException e) {            e.printStackTrace();        }        return quot;    }    public static Long convertDateToLong(Date date, String format) {        SimpleDateFormat ft = new SimpleDateFormat(format);        String formatStr = ft.format(date);        long parseLong = Long.parseLong(formatStr);        return parseLong;    }    public static Long convertDateToLong(Date date) {        String formatStr = FORMAT_DATETIME_SIMPLE.format(date);        long parseLong = Long.parseLong(formatStr);        return parseLong;    }}
View Code

 

 

待完,很粗糙的东西 ,花了10分钟整理了下,要赶最后一班地铁回家了。 又是漫长的1个半小时。。。。 

转载于:https://www.cnblogs.com/frank-quan/p/6002141.html

你可能感兴趣的文章
Round Numbers
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Varish 缓存
查看>>
Jbpm5.4实例在JBoss中运行、及H2数据库迁移oracle数据库
查看>>
各个平台的mysql重启命令
查看>>
统计单词,字符,和行
查看>>
蓝牙的几种应用层协议作用
查看>>
《Akka应用模式:分布式应用程序设计实践指南》读书笔记8
查看>>
jQuery垂直滑动切换焦点图
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
模运算
查看>>
python多线程的使用
查看>>
团队编程项目作业1-成员简介及分工
查看>>
使用Chrome(PC)调试移动设备上的网页
查看>>
UI基础--手写代码实现汤姆猫动画
查看>>
Python+pytesseract+Tesseract-OCR图片文字识别(只适合新手)
查看>>
使用gitbash来链接mysql
查看>>
docker镜像管理基础
查看>>
黑盒测试和百合测试的优缺点对比
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>